ďťż
Podstrony
|
telcocafePola w tabeli artykuły:ID | Tytuł | Język | Włączony Czy da się skonstruować zapytanie (dla MySQL 5 oraz SQLite 3), aby pobrać co najmniej 10 najnowszych rekordów (ORDER BY ID DESC) dla każdej innej wartości pola Język? Rekordy muszą spełniać dodatkowo warunek: WHERE `Włączony` = 1 Załóżmy, że istnieją 2 języki: PL i EN. Chcę wyciągnąć listę artykułów, która będzie zawierać 10 po angielsku oraz 10 po polsku. Nie mogę po prostu napisać: LIMIT 20, gdyż równowaga ilości artykułów w poszczególnych językach zostanie zachwiana (np. 5 po angielsku i 15 po polsku). Jest to w ogóle możliwe Jeśli nie, będę musiał wysyłać więcej zapytań. N = liczba typów * liczba języków. PS. Polskie znaki są w przykładzie dla ułatwienia. W rzeczywistości stosuję angielskie słowa. $data1 = mysql_query('select jezyk from artykuly where wlaczony = 1'); $jezyki = array(); while($a = mysql_fetch_assoc) $jezyki[] = $a['jezyk']; array_unique($jezyki); w ten sposób mozna pobrać jakie są jezyki (np $jezyki = array('PL','EN')) nie lepiej zrobić osobną tabelę 'Langs'? |id||langCaption| |1||Polish| |2||English| potem do artów w Język dawać np 1 a potem przy wypisywaniu danych dać warunek: while($data = ...) { if($data == $_SESSION['lang']) { [....] } } ? :) czy język będzie identyfikowany po liczbie czy po łańcuchu to wielkiej różnicy nie zrobi. Kwestia tylko czy potrzebny jest taki system wielojęzyczności treści. Zazwyczaj serwisy wielojęzyczne z regularnie pojawiającą się dynamiczną treścią oferują oddzielne instancje serwisu dla każdego z języków (wikipedia dla przykładu). Tego typu rozwiązanie co powyżej można zastosować raczej dla bardzo prostych stron - np. strona firmy o stałej zawartości (kontakt/oferta itp.) Napisałem funkcję: http://www.unit1.pl/pb-897 Przykładowe zapytanie: http://www.unit1.pl/pb-898 Niestety nie osiągnąłem pożądanego rezultatu. Powyższe zapytanie pobiera tylko 5 rekordów. Gdy zamienię 5 na 15, otrzymuję 15 pozycji dowolnego typu (czyli nie 5 x 3). Gdy umieszczę słowo LIMIT w każdej z 3 części zapytania, SQLite wyrzuca błąd, że LIMIT nie może stać przed UNION. Jeszcze większy problem z sortowaniem. Chcę pobrać 5 najnowszych pozycji dla każdego typu. Zapytanie wyciąga 5 najstarszych. Gdy umieszczę ORDER BY w każdej części, występuje błąd, że ORDER BY nie może stać przed UNION. Gdy umieszczę go tylko w ostatniej części (przed LIMIT), otrzymuję kolejny błąd:General error: 1 ORDER BY term number 1 does not match any result columnORDER BY i.ID DESCJeśli z UNION usunę ALL, SQLite sortuje rekordy automatycznie (bez ORDER BY). A może lepiej nie dzielić listy najnowszych pozycji na typy (artykuły, pliki, zdjęcia), lecz na kategorie, do których należą? Wykonaj oddzielne zapytania dla każdego języka i spokój. |
|||
Sitedesign by AltusUmbrae. |