![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
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
|
|
|
![]()
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.
|
|
|
![]()
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
![]() ale chciałem w jedno zapytanie dlatego że mniej kodu w pliku ![]() |
|
|
![]()
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.
![]() |
|
|
![]() ![]()
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
![]() -------------------- 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
|
|
|
![]()
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 |
|
|
![]()
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
|
|
|
![]()
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?
|
|
|
![]()
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,
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.
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 ![]() ![]() -------------------- 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
|
|
|
![]()
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
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 06:40 |