Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dublowanie i wiecej wyników
Forum PHP.pl > Forum > Bazy danych > MySQL
szok
Witam, mam mały problem, po wykonaniu tego zapytania SQL, niektóre wyniki mam po 4 razy to samo sad.gif a wpisy w bazie są poprawne, co robię nie tak w tym zapytaniu SQL? Proszę o pomoc smile.gif

  1. SELECT
  2. shop_users.id,
  3. shop_orders.id,
  4. shop_orders.klient,
  5. shop_orders.czas,
  6. shop_orders.produkty,
  7. shop_orders.cena,
  8. shop_orders.wysylka,
  9. shop_orders.platnosc,
  10. shop_orders.drukowane,
  11. shop_orders.STATUS,
  12. shop_orders.paragon,
  13. shop_users.imie,
  14. shop_users.nazwisko,
  15. shop_users.ulica,
  16. shop_users.nr_domu,
  17. shop_users.nr_mieszkania,
  18. shop_users.kod_pocztowy,
  19. shop_users.miasto,
  20. shop_users.telefon,
  21. shop_users.email,
  22. shop_orders_useraddress.order_id,
  23. shop_orders_useraddress.useraddress,
  24. shop_orders_date.order_id,
  25. shop_orders_date.prod,
  26. shop_orders_date.reel,
  27. shop_orders_comments.order_id,
  28. shop_orders_comments.comments,
  29. shop_orders_invoices.order_id,
  30. shop_orders_invoices.invoice,
  31. shop_orders_payment.order_id,
  32. shop_orders_payment.pay_status
  33. FROM shop_orders LEFT JOIN shop_users ON (shop_orders.klient=shop_users.id)
  34. LEFT JOIN shop_orders_useraddress ON (shop_orders_useraddress.order_id=shop_orders.id)
  35. LEFT JOIN shop_orders_date ON (shop_orders_date.order_id=shop_orders.id)
  36. LEFT JOIN shop_orders_comments ON (shop_orders_comments.order_id=shop_orders.id)
  37. LEFT JOIN shop_orders_invoices ON (shop_orders_invoices.order_id=shop_orders.id)
  38. LEFT JOIN shop_orders_payment ON (shop_orders_payment.order_id=shop_orders.id)
  39. WHERE shop_orders.STATUS = '3' ORDER BY shop_orders.czas
nospor
robisz masę left joinow. Jesli wiec left join daje ci wiecej niz jeden rekord, to rekordy z tabeli glownej zostaną powielone tyle razy, ile razy bylo połączen z left join dla danego rekordu. jest to sytuacja jaka najbardziej normalna smile.gif
szok
A jest jakiś sposób na pozbycie się tego dublowania? Lub co mogę użyć zamiast Left Joina ?

Hm ale to jest trochę dziwne bo to robi mi tylko dokilku rekordów, a reszta pozostaje bez zmian.
nospor
Cytat
A jest jakiś sposób na pozbycie się tego dublowania? Lub co mogę użyć zamiast Left Joina ?
Wszystko zalezy od tego co chcesz osiągnac.

Cytat
Hm ale to jest trochę dziwne bo to robi mi tylko dokilku rekordów, a reszta pozostaje bez zmian.
Juz ci tlumaczylem, ze dubluja sie tylko te, ktora mają kilka odwolan z left join.
Przykladowo jesli do danego rekordu z shop_orders masz kilka komentarzy w shop_orders_comments, to ten rekord ci sie zdubluje
szok
Hm to już wiem,
dodałem DISTINCT za selectem, i rozwiązało problem, ale czy to było dobre rozwiązanie?
nospor
Cytat
dodałem DISTINCT za selectem, i rozwiązało problem, ale czy to było dobre rozwiązanie?
No napisalem ci przeciez: wszystko zalezy od tego co chciales osiągnąc. jesli distict daje ci to co chciales to tak, to bylo dobre rozwiązanie.
Nie rozumiem tylko poco wiec dawales przykladowo left joina na komentarze, skoro i tak dales distinct i nie wyciągasz wszystkich komentarzy smile.gif
szok
Tzn tak, w każdej tabeli powinienem mieć tylko po jednym rekordzie, wygląda na to że tabela shop_order_payment ma zdublowane wpisy i przez to mi to wyświetla, najgorsze jest to że zgubił mi numery zamówień, i przy 4-5 zamówieniach nie wyświetla się te zamówienia też właśnie były zdublowane.

Sam nie projektowałem tej bazy, muszę operować na danych które tak są jak i relacjach w nich sad.gif

Najważniejsza jest shop_orders, klient i payment

Wygląda na to że teraz jest ok, wina jednak leżała po stronie tabeli shop_order_payment. Dziękuje za pomoc smile.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-2024 Invision Power Services, Inc.