Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Łączenie tabel dwa zapytania
Forum PHP.pl > Forum > Przedszkole
nikestylex7
Witam posiadam problem stworzyłem wyszukiwarkę działa prawidłowo dla wyszukiwania oddzielnego tzn jak szukam towaru lub pojazdu lecz chciałbym przerobić trochę zapytanie sql tak aby gdy wchodzę w wyszukiwarke pokazywało mi lącznie wszystkie pojazdy i ładunki.
To moje dwa zapytania

  1. $sql = "select * from cargoAdd join user on user.id_log=cargoAdd.userID join cargoAddInfo on cargoAddInfo.uniqID=cargoAdd.id join payment on payment.userID=user.id_log where cargoActive = 1 AND cargoDatetime >= NOW() AND leftTime >= NOW() ORDER by cargoDatetime ASC LIMIT 0,50";
  2.  
  3. $sql = "select * from vehicleAdd join user on user.id_log=vehicleAdd.userID join vehicleAddInfo on vehicleAddInfo.uniqID=vehicleAdd.id join payment on payment.userID=user.id_log where vehicleActive = 1 AND vehicleDatetime >= NOW() AND leftTime >= NOW() ORDER by vehicleDatetime ASC LIMIT 0,50";
  4.  


Czy istnieje taka możliwość ?
bostaf
Składnia UNION. Upewnij się, że oba zapytania zwracają taką samą ilość pól i te pola są semantycznie zgodne.
nikestylex7
tak zwracają taką samą ilość pól możesz zademonstrować jak to zrobić bo mi nie działa poprawnie
bostaf
Teraz masz:
  1. $sql = "select * from cargoAdd ...";
  2.  
  3. $sql = "select * from vehicleAdd ...";

Zastąp to:
  1. $sql = "select * from cargoAdd ...
  2. union
  3. select * from vehicleAdd ...";
nikestylex7
a jak potem się do tego odwoływać ?

Chodzi mi o pobieranie danych z tego zapytania?

Nie działa poprawnie nie wiem czy jest błąd po stronie semantyczności ale oba zapytania są takie same czyli muszą zwracać to samo lecz z innych tabel niektóre rekordy są nazywane cargo inne vehicle nie wiem czy to ma jakis wplyw
bostaf
Pokaż to co masz i napisz co nie działa.
Czytałeś tą dokumentację do UNION?
nikestylex7
mam 2 tabele dzielące się na jeszcze po 1 tabeli cargoAdd, vehicleAdd, cargoAddInfo i vehicleAddInfo. Tak jak podałem mam dwa zapytania jedno wyszukuje wszystkie ładunki drugie wszystkie pojazdy, chciałbym zrobić takie coś żeby i pojazdy i ładunki pokazywało mi jak wejdę w wyszukiwarkę bez zbędnego wyszukiwania. Dotychczas muszę oddzielnie najpierw pokazywać ładunki potem pojazdy chciałbym aby to było robione razem.

  1. $sql = "select * from cargoAdd join user on user.id_log=cargoAdd.userID join cargoAddInfo on cargoAddInfo.uniqID=cargoAdd.id join payment on payment.userID=user.id_log where cargoActive = 1 AND cargoDatetime >= NOW() AND leftTime >= NOW() ORDER by cargoDatetime ASC LIMIT 0,50";


Pierwsze zapytanie pokazuje wszystkie ładunki od 1 do 50, które spełniają podane warunki, drugie pokazuje pojazdy które spełniają te same warunki, chciałbym je jakoś połączyć.

  1. $sql = "select * from vehicleAdd join user on user.id_log=vehicleAdd.userID join vehicleAddInfo on vehicleAddInfo.uniqID=vehicleAdd.id join payment on payment.userID=user.id_log where vehicleActive = 1 AND vehicleDatetime >= NOW() AND leftTime >= NOW() ORDER by vehicleDatetime ASC LIMIT 0,50";


?
mmmmmmm
Abstrahujc od tego, że UNION to zło, to:
1. Nie dawaj do UNION *, dlaczego to poniżej
2. w każdym selekcie ilość pól i poszczególne typy pól MUSZĄ być zgodne (typy w MySQL chyba nie, ale MySQL to nie jest coś na czym bym się wzorował)
3. UNION wyrzuca duplikaty (nawet w obrębie jednego podzapytania), nie robi tego UNION ALL.
4. UNION na MySQL ma jakieś problemy z "białymi znakami" - źle grupuje - ma to związek ze złym działaniem GROUP BY
nikestylex7
w takim razie co mam zrobić może przerobić zapytania i bazę? Jak Wy byście to zrobili? chcę połączyć pojazdy i ładunki aby wyświetlało je od aktualnej daty DESC

?


Pomoże ktoś?

hmm Czy ktoś korzysta z wyszukiwarki na swojej stronie?
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.