[MySQL 4.1] IN i LIMIT dla każdej wartości
Jarosław Ziółkowski - 30-12-2006 01:03
[MySQL 4.1] IN i LIMIT dla każdej wartości
Witam,
mam tabelę z której pobieram dane, w klauzuli "Where" podaję in(wartosc,wertosc, wartosc)
Jednak zależy mi na tym żeby dla każdej z tych wartości zostały pobrane najwyżej 3 rekordy. Jeśli zrobie powiedzmy LIMIT 9 a z wartością pierwszą będzie 8 rekordów to mi je wszystkie pobierze. Nie za bardzo wiem jak kto rozwiązać. Ma ktoś jakiś pomysł?
Wojtek Zieliński - 30-12-2006 01:03
On 29 Gru, 11:28, Jarosław Ziółkowski <ziolkowski_jaros...@o2.pl> wrote: > mam tabelę z której pobieram dane, w klauzuli "Where" podaję > in(wartosc,wertosc, wartosc) > > Jednak zależy mi na tym żeby dla każdej z tych wartości zostałypobrane > najwyżej 3 rekordy. Jeśli zrobie powiedzmy LIMIT 9 a z wartością > pierwszą będzie 8 rekordów to mi je wszystkie pobierze. Nie za bardzo > wiem jak kto rozwiązać. Ma ktoś jakiś pomysł?
Skorzystaj z klauzuli UNION taczac trzy zapytania:
SELECT ... FROM ... WHERE cos_tam=wartosc1 LIMIT 0, 3 UNION SELECT ... FROM ... WHERE cos_tam=wartosc2 LIMIT 0, 3 UNION SELECT ... FROM ... WHERE cos_tam=wartosc3 LIMIT 0, 3;
Nie jestem pewien czy o to chodzilo.
-- Wojtek Zieliński http://www.zielinscy.pl
Jarosław Ziółkowski - 30-12-2006 01:03
Wojtek Zieliński napisał(a): > On 29 Gru, 11:28, Jarosław Ziółkowski <ziolkowski_jaros...@o2.pl> > wrote: > >>mam tabelę z której pobieram dane, w klauzuli "Where" podaję >>in(wartosc,wertosc, wartosc) >> >>Jednak zależy mi na tym żeby dla każdej z tych wartości zostały pobrane >>najwyżej 3 rekordy. Jeśli zrobie powiedzmy LIMIT 9 a z wartością >>pierwszą będzie 8 rekordów to mi je wszystkie pobierze. Nie za bardzo >>wiem jak kto rozwiązać. Ma ktoś jakiś pomysł? > > > Skorzystaj z klauzuli UNION taczac trzy zapytania: > > SELECT ... FROM ... WHERE cos_tam=wartosc1 LIMIT 0, 3 > UNION > SELECT ... FROM ... WHERE cos_tam=wartosc2 LIMIT 0, 3 > UNION > SELECT ... FROM ... WHERE cos_tam=wartosc3 LIMIT 0, 3; > > Nie jestem pewien czy o to chodzilo. > Jeśli chodzi o wynik to zgadza się. Myślałem nad tym jak rowiązać to w jednym zapytaniu bez ich łączenia.
Dzięki wielkie, widać jednak nie da się takich rzeczy :)
Jarosław Ziółkowski - 30-12-2006 01:03
Wojtek Zieliński napisał(a): > On 29 Gru, 11:28, Jarosław Ziółkowski <ziolkowski_jaros...@o2.pl> > wrote: > >>mam tabelę z której pobieram dane, w klauzuli "Where" podaję >>in(wartosc,wertosc, wartosc) >> >>Jednak zależy mi na tym żeby dla każdej z tych wartości zostały pobrane >>najwyżej 3 rekordy. Jeśli zrobie powiedzmy LIMIT 9 a z wartością >>pierwszą będzie 8 rekordów to mi je wszystkie pobierze. Nie za bardzo >>wiem jak kto rozwiązać. Ma ktoś jakiś pomysł? > > > Skorzystaj z klauzuli UNION taczac trzy zapytania: > > SELECT ... FROM ... WHERE cos_tam=wartosc1 LIMIT 0, 3 > UNION > SELECT ... FROM ... WHERE cos_tam=wartosc2 LIMIT 0, 3 > UNION > SELECT ... FROM ... WHERE cos_tam=wartosc3 LIMIT 0, 3; > > Nie jestem pewien czy o to chodzilo. > No i pojawił się kolejny problem, chociaż się go nie spodziewałem. Z tego co mi wiadomo łączone zapytania muszą generować taką samą liczbę kolumn i przynajmiej ten sam typ danych w nich. Ja łącze identyczne zapytania tylko w warunku są różne wartości. Dokładnie zapytanie wygląda tak:
SELECT Artykuly.IdentyfikatorArtykulu, TytulArtykulu, Artykuly.IdentyfikatorKategorii, KategorieMenu.NazwaKategorii FROM Artykuly INNER JOIN KategorieMenu ON Artykuly.IdentyfikatorKategorii=KategorieMenu.Iden tyfikatorKategorii WHERE Artykuly.IdentyfikatorKategorii=wartosc LIMIT 0, 1 UNION i dokładnie to samo z inną wartością.
Nie generują się takie same zbiory wynikowe ale próbowałem też z UNION ALL I za każdym razem wywala mi wynik tylko z pierwszego zapytania. Jeśli tylko w warunku jest poprawna wartość generuje się wynik. Niestety kolejne zapytanie jest w nim pomijane, mimo że powinno zwrócić dane takich samych typów z takimi samymi nazwami pól.
Jarosław Ziółkowski - 30-12-2006 01:03
Jarosław Ziółkowski napisał(a): > Witam, > > mam tabelę z której pobieram dane, w klauzuli "Where" podaję > in(wartosc,wertosc, wartosc) > > Jednak zależy mi na tym żeby dla każdej z tych wartości zostały pobrane > najwyżej 3 rekordy. Jeśli zrobie powiedzmy LIMIT 9 a z wartością > pierwszą będzie 8 rekordów to mi je wszystkie pobierze. Nie za bardzo > wiem jak kto rozwiązać. Ma ktoś jakiś pomysł?
Problem został rozwiązany, może ktoś potrzebujący będzie przeszukiwać grupę więc napiszę. Jeśli dla każdego zapytania ma być limit osobno ustalany to zapytania muszą być umieszczone w nawiasach.
Pozdrawiam.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.plponland.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|