Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dublowanie i wiecej wyników
szok
post 14.05.2009, 07:24:42
Post #1





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


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


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.05.2009, 07:26:35
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
szok
post 14.05.2009, 07:30:49
Post #3





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


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.

Ten post edytował szok 14.05.2009, 07:33:53


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.05.2009, 07:44:06
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
szok
post 14.05.2009, 07:45:43
Post #5





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


Hm to już wiem,
dodałem DISTINCT za selectem, i rozwiązało problem, ale czy to było dobre rozwiązanie?


--------------------
Go to the top of the page
+Quote Post
nospor
post 14.05.2009, 07:49:42
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
szok
post 14.05.2009, 07:58:10
Post #7





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


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

Ten post edytował szok 14.05.2009, 08:11:16


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 21:51