![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Spotkałem się z problemem stronicowania przy łączeniu kilku tabel. Załóżmy że mam tabelę artykułów, ich kategorii i trzecią w której składuje identyfikatory artykułów i kategorii celem powiązania ich ze sobą. W zapytaniu łączę tabele ( LEFT JOIN ) co w przypadku dwóch kategorii przypisanych do jednego artykułu zwróci mi dwa wyniki opisujące jeden artykuł. Co mam zrobić w takim razie jeśli chcę pobrać tylko 5 artykułów? Jeśli wpiszę LIMIT 5 artykuł z dwiema kategoriami zwróci mi dwa wiersze wyników i tak na prawdę tylko 4 artykuły zostaną pobrane. Czy można wprowadzić limit na kolumnę ? Na przykład: Pobierz dane z tabeli artykuły łącząc z tabelą łącznik gdzie art.id = łącznik.art_id i połącz z kategorie gdzie cat.id = łącznik.cat_id WHERE art.id 5 unikalnych - zamiast LIMIT 5 edit> Moje wyjaśnienie pewnie guzik daje więc wrzucam bazę i zapytanie Zapytanie:
Dostanę wynik: Cytat +-------+----------+---------+- Czyli zamiast 5 wyników dostaję 3 wyniki. Winowajcą jest LIMIT który zlicza mi wiersze zamiast unikalnych wystąpień na przykład al_id. Jak zmusić zapytanie do pobierania wyników o 5 unikalnych identyfikatorach a nie 5 wierszach.
| al_id | al_title | al_desc | +-------+----------+---------+- | 1 | Tytul 1 | Opis 1 | | 1 | Tytul 1 | Opis 1 | | 2 | Tytul 2 | Opis 2 | | 2 | Tytul 2 | Opis 2 | | 3 | Tytul 3 | Opis 3 | +-------+----------+---------+- Ten post edytował orglee 24.09.2008, 05:16:03 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 3 Dołączył: 27.07.2007 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Można użyć GROUP BY, ale nie wiem czy takie zapytanie będzie zwracało to o ci chodzi.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
No właśnie niestety nie zwraca. Łączy wyniki według al_id i ilość wyników jest poprawna.
Niestety przy okazji również kasuje wyniki kategorii. Czyli do każdego artykułu jest dopisana jedna kategoria, a nie 3, 2 bądź ileś tam. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 3 Dołączył: 27.07.2007 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Hm nie wiem czy da się to zrobić za pomocą jednego zapytania (wydaje mi się że nie).
Ja bym dopisał jedno zapytanie które pobiera powiedzmy 5 artykułów z tabeli article_list - wyświetlasz artykuły i dla każdego arta pobierasz kategorie do których nalezy (drugie zapytanie) czyli dla 5 artykułów miałbyś dodatkowe 5 zapytań jeśli chodzi o wydajność to zawsze można użyć cacha... |
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%) ![]() ![]() |
Niech ci bozia w dzieciach wynagrodzi dobry człowieku.
Właśnie zamierzałem pokombinować z zagnieżdżaniem zapytań. edit> Zaczynam się interesować Propel'em i tak się zastanawiam jakby to mogło w nim wyglądać. Ten post edytował orglee 24.09.2008, 17:20:46 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 16:36 |