Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Kilka tabel i wyciaganie danych
Robert007
post 27.08.2009, 21:38:08
Post #1





Grupa: Zarejestrowani
Postów: 167
Pomógł: 2
Dołączył: 1.07.2009
Skąd: Poznań

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


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
Go to the top of the page
+Quote Post
thek
post 27.08.2009, 21:54:57
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Kszyhuu
post 27.08.2009, 22:02:47
Post #3





Grupa: Zarejestrowani
Postów: 157
Pomógł: 32
Dołączył: 24.08.2009

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


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.
Go to the top of the page
+Quote Post
Robert007
post 27.08.2009, 22:20:42
Post #4





Grupa: Zarejestrowani
Postów: 167
Pomógł: 2
Dołączył: 1.07.2009
Skąd: Poznań

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


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
Go to the top of the page
+Quote Post
Kszyhuu
post 27.08.2009, 22:26:25
Post #5





Grupa: Zarejestrowani
Postów: 157
Pomógł: 32
Dołączył: 24.08.2009

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


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. :-)
Go to the top of the page
+Quote Post
thek
post 28.08.2009, 01:18:35
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Robert007
post 28.08.2009, 17:39:47
Post #7





Grupa: Zarejestrowani
Postów: 167
Pomógł: 2
Dołączył: 1.07.2009
Skąd: Poznań

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


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

Ten post edytował Robert007 28.08.2009, 19:32:14
Go to the top of the page
+Quote Post
thek
post 28.08.2009, 21:10:11
Post #8





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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ć.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Robert007
post 29.08.2009, 13:23:06
Post #9





Grupa: Zarejestrowani
Postów: 167
Pomógł: 2
Dołączył: 1.07.2009
Skąd: Poznań

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


możesz pokazać na przykładzie?
Go to the top of the page
+Quote Post
thek
post 29.08.2009, 14:22:23
Post #10





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Robert007
post 29.08.2009, 15:03:44
Post #11





Grupa: Zarejestrowani
Postów: 167
Pomógł: 2
Dołączył: 1.07.2009
Skąd: Poznań

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


no właśnie brakowało mi tylko GROUP BY t1.value a tak po za tym wszystko miałem smile.gif

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: 14.08.2025 - 06:40