Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Kilka tabel i wyciaganie danych
Forum PHP.pl > Forum > Przedszkole
Robert007
witam, czy da radę za pomocą jednego zapytania z np trzech tabel wyciągnąć takie dane jak:
- liczba wpisów w każdej z tabeli o podanych wartościach
- wyciąganie danych z poszczególnych tabel

Czyli przeszukiwanie i liczenie wpisów ogólnych dla danych wartości np where cos > 2
thek
Wszystko zależy głównie od struktury tabel. Czasem nie da się tego zrobić w prosty sposób, albo jest to bezsensowne ze względu na obciążanie bazy niepotrzebne i lepiej rozbić to na kilka zapytań niż na siłę budować jedno skomplikowane.
Kszyhuu
Thek dobrze mówi. Zrób trzy zapytania i baw się na zmiennych. Najlepiej powiedz o co dokładnie chodzi, bo ciężko cokolwiek powiedzieć na podstawie tego przykładu. Jak będzie wiadomo szczegółowo ocb, to coś się zaradzi.
Robert007
na 3 zapytania to nie ma problemu poradzę sobie tongue.gif
ale chciałem w jedno zapytanie dlatego że mniej kodu w pliku worriedsmiley.gif
Kszyhuu
No spoko, to pokaż o co chodzi i się pokmini, chociaż nie warto. Męczyć się, żeby kod nie miał 652 linijek, tylko 650 to bezsens. biggrin.gif On ma być optymalny i przejrzysty, a nie krótki. :-)
thek
Dobre zapytanie jednolinijkowe zazwyczaj przekazuje tyle danych, że skracasz jego obróbkę w php do minimum, co redukuje liczbę operacji i kod od strony programisty. Poza tym na co zmniejszać wielkość kodu, skoro potem byś musiał dorzucać masę komentarzy by zrozumieć co napisałeś i dlaczego tak, a nie inaczej. No i nie ma kodu optymalnego. Zawsze można coś zrobić lepiej jeśli będzie to rozwiązanie dostosowane do konkretnego problemu. Obecnie około 50% kodu to faktycznie ten od obsługi. Reszta to zabezpieczanie się przed głupotą lub pomysłowością użytkowników. Niektórzy zaś powiedzą, że jestem optymistą podając takie dane winksmiley.jpg
Robert007
Cytat
na co zmniejszać wielkość kodu, skoro potem byś musiał dorzucać masę komentarzy by zrozumieć co napisałeś i dlaczego tak, a nie inaczej.


dobry webmaster - programista bez problemu odczyta to co widzi. - ja bym nie miał z tym problemu
da się za pomocą jednego zapytania pobrać dane z MYSQL w ten sposób? :

ilość wpisów o danej wartości (tj. WHERE) w tabeli1 i JEŻELI w tabeli2 jest co najmniej 1 wpis to warunek się spełnia ALE aby nie sortowało mi dalej w tabeli 2 a w tebli1 dalej przesortowało sprawdzając w/w wartości

może pokaże to na przykładzie:

2 tabele + sortowanie

TABELA1 t1
TABELA2 t2

t1
wpis1 --> t2 szukanie co najmniej jednego wpisu z warunkiem t1.wartosc = t2.wartosc
wpis2
wpis3
wpis4

np w tabeli1 do pierwszego wpisu znalazło wpis w tabeli2 np trzeci
i już dalej nie sortuje dla tabeli1 tego pierwszego wpisu tylko teraz dla drugiego szuka w tabeli2 jakiegoś wpisu (ale tylko jeden)
i tak dalej aż przeleci wszystkie wpisy w tabeli1 sprawdzając czy jakieś jeden wpis w tabeli2 pasuje do tabeli1
thek
Zwykły LEFT JOIN gdzie warunek ON = t1.value = t2.value wypluje Ci wszystkie kombinacje gdzie t.value = t2.value, ale jeśli chcesz mieć tylko po jednym wpisie z t2 dla każdego rekordu z t to tylko robisz GROUP BY jakieś pole z tablicy t1. i się dalej możesz bawić.
Robert007
możesz pokazać na przykładzie?
thek
Przecież napisałem tak prosto, że stworzenie z tego zapytania jest banalne nawet dla początkujących z sql.
Zwykły LEFT JOIN gdzie warunek ON = t1.value = t2.value wypluje Ci wszystkie kombinacje gdzie t.value = t2.value,
  1. SELECT * FROM tabela t1 LEFT JOIN tabela t2 ON t1.value = t2.value

ale jeśli chcesz mieć tylko po jednym wpisie z t2 dla każdego rekordu z t1 to tylko robisz GROUP BY jakieś pole z tablicy t1.
  1. ... GROUP BY t1.value

i się dalej możesz bawić.
Czyli możesz używać HAVING, ORDER BY, LIMIT. A nawet na upartego zanim by doszło do GROUP BY to jeszcze mogłeś ograniczyć liczbę rekordów przez WHERE.
Nie wiem czy można było opisać słowami to prościej winksmiley.jpg Tu nawet przykładu nie trzeba pisać bo masz wszystko prawie jak na tacy winksmiley.jpg
Robert007
no właśnie brakowało mi tylko GROUP BY t1.value a tak po za tym wszystko miałem 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-2025 Invision Power Services, Inc.