Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] - złaczenie i wyswietlenie najnowszej opini danego produktu
Forum PHP.pl > Forum > Bazy danych > MySQL
WiruSSS
Mam 3 tabele, w pierwszej tabeli są dajmy na to jakieś produkty w drugiej opinie o tych produktach a w trzeciej uzytkownice piszący te opinie. Potrzebuję takie zapytanie które wyświetli mi wszystkie produkty obok pokaze najnowszą opinię oraz nazwę uzytkownika.

W zasadzie jestem już prawie na finiszu takieg ozapytania lecz problem jest z wyświetleniem własnie tej ostatniej opinii ...mysql podczas zlaczenia zwraca mi pierwszą pasująca opinię, ktora niekoniecznie jest tą najnowszą. Tutaj podaję dane aby zobrazować co potrzebuję osiągnąć:

  1. `produkty`
  2.  
  3. +----+-------+
  4. | id | nazwa |
  5. +----+-------+
  6. | 1  | p1    |
  7. +----+-------+
  8. | 2  | p2    |
  9. +----+-------+
  10.  
  11.  
  12. `opinie`
  13.  
  14. +----+-----+-----+--------+
  15. | id | uid | pid |  tresc |
  16. +----+-----+-----+--------+
  17. | 1  | 23  |  1  | tresc1 |
  18. +----+-----+-----+--------+
  19. | 2  | 345 |  2  | tresc2 |
  20. +----+-----+-----+--------+
  21. | 3  | 142 |  2  | tresc3 |
  22. +----+-----+-----+--------+
  23. | 4  | 364 |  1  | tresc4 |
  24. +----+-----+-----+--------+
  25. | 5  |  2  |  1  | tresc3 |
  26. +----+-----+-----+--------+
  27.  
  28.  
  29. `users`
  30.  
  31. +-----+-------+
  32. | id  | nick  |
  33. +-----+-------+
  34. | 23  | nick1 |
  35. +-----+-------+
  36. | 142 | nick2 |
  37. +-----+-------+
  38. |  2  | nick3 |
  39. +-----+-------+


..teraz potrzebuję uzyskac taki wynik

  1. +----+-----+-----+--------+-------+
  2. | lp | naz | oid | opinia | autor |
  3. +----+-----+-----+--------+-------+
  4. | 1  | p1  |  3  | tresc3 | nick3 |
  5. +----+-----+-----+--------+-------+
  6. | 2  | p2  |  5  | tresc5 | nick2 |
  7. +----+-----+-----+--------+-------+


czyli listę wszystkich produktów z ostatnio dodaną opinią oraz nazwą autora opinii.

PS: Przepraszam że użyłem XML zamiast SQL ale tylko przy XML jest czcionka o jednakowej szerokości znaków, która była potrzebna do poprawnego wyświetlenia tych pseudotabelek tongue.gif
wookieb
Zainteresuj sie zapytaniami z JOIN http://pececik.com/showthread.php?t=1184
WiruSSS
jak napisałem wcześniej problemem nie są dla mnie zlączenia których powszechnie używam ..problemem dla mnie jest takie skonstruowanie tego zapytania powiązać te 3 tabele w taki sposób aby wyświetlić wszystkie rekordy z tabeli produkty oraz ostatnią opinię danego produktu ..dodam jeszce że wazne dla mnie jest takze policzenie ilości opini danego produktu więc samo ograniczenie opini do ostatniej nie jest satysfakcjonujące ..bardziej chodziło by o to żeby dołączona tabela z opiniami była niejako posortowana od najnowszej do najstarszej ..abym wybierając wartosci z tego rekordu wybierał zawsze te z najnowszego.
wookieb
Pokaż dokładne zapytanie jakie dajesz.
WiruSSS
więc analogicznie wygladało by to tutaj tak:

  1. 'SELECT
  2.  
  3. `p`.`id` `id_produktu`,
  4. COUNT(`o`.`id`)-1 `countoid`,
  5. MAX(`o`.`id`) `maxoid`
  6.  
  7. FROM `produkty` `p`
  8. LEFT JOIN `opinie` `o` ON `o`.`pid`=`p`.`id`
  9. LEFT JOIN `users` `u` ON `u`.`id`=`o`.`uid`
  10.  
  11. WHERE tutajdodatkowemojenieistotnekryteria
  12. GROUP BY `id_produktu`
  13. ORDER BY `id_produktu` DESC , `maxoid` DESC LIMIT 25 '


i teraz przy próbie dodania do select przykładowo takiej linijki:

  1. `o`.`id` `id_opinii`


..owszem dostaję id opinii danegoproduktu ..ale nie jest to ostatnia opinia ..a potrzebuje aby to zawsze była ostatnia opinia.

..idealnie byłoby gdyby dało się w zapytaniu skorzystać z wartości wybieranych w SELECT ..jednak nie jest to mozliwe ..wtedy wystarczyłoby zrobić tak:

  1. 'SELECT
  2.  
  3. `p`.`id` `id_produktu`,
  4. COUNT(`o`.`id`)-1 `countoid`,
  5. MAX(`o`.`id`) `maxoid`
  6.  
  7. FROM `produkty` `p`
  8. LEFT JOIN `opinie` `o` ON `o`.`pid`=`p`.`id`
  9. LEFT JOIN `opinie` `o2` ON `o2`.`id`=`maxoid`
  10. LEFT JOIN `users` `u` ON `u`.`id`=`o`.`uid`
  11.  
  12. WHERE tutajdodatkowemojenieistotnekryteria
  13. GROUP BY `id_produktu`
  14. ORDER BY `id_produktu` DESC , `maxoid` DESC LIMIT 25 '


i już mielibyśmy do dyspozycji wszelkie dane z najnowszej opinii ..a tak to guzik sad.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.