Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] - złaczenie i wyswietlenie najnowszej opini danego produktu
WiruSSS
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował WiruSSS 21.02.2009, 21:18:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Zainteresuj sie zapytaniami z JOIN http://pececik.com/showthread.php?t=1184
Go to the top of the page
+Quote Post
WiruSSS
post
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Pokaż dokładne zapytanie jakie dajesz.
Go to the top of the page
+Quote Post
WiruSSS
post
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował WiruSSS 21.02.2009, 23:14:33
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 12:06