![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam takie pytane, czy jest możliwe w jednym zapytaniu
wyciągnąć szukane słowo ale z wielu tabel? tzn. mam tabele odpowiadającą za newsy, inną odpowiadającą za blog, i jeszcze inne tabele które należą do różnych działów. Bardzo popularne jest w opcjach wyszukiwania na serwisach 'szukaj wszędzie'. Te tabele mają generalnie podobne pola ale różnią się nazwami pól i tabel. Czy jest możliwe w jednym zapytaniu przeszukać dokładnie 5 tabel odpowiadających za kolejne działy w serwisie? I pogrupować te dane wynikowe jakoś (np na działy). dokładnie chcę uzyskać id wpisu, nazwę wpisu , datę i krótki opis, a szukam po specjalnej komórce 'sarche' która jest typu text i ma ustawiony na komórce fulltext. Szukam oczywiście jakiegoś słowa , wyrażenia wpisanego przez kogoś. Ma ktoś jakiś pomysł jak to zrobić? I kolejne pytanie , czy takie rozwiązanie z jednym zapytaniem, do wielu tabel jest optymalne? Czy lepiej każdą tabele odpytywać z osobna potem te dane jakoś połączyć i wyświetlić wynik? Które rozwiązanie jest według was leprze? Dzięki i pozdrawiam.... |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
np tak
|
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Ale czy to jest bezpieczne zapytanie?
No i czy lepiej zapytać bazę tak (w jednym zapytaniu), czy w paru zapytaniach z osobna? np tak
Coś to zapytanie z UNION nie za dobrze działa , najpierw wołał coś o GROUP BY bo zapytania sobie grupowałem , potem woła cały czas te działy , możesz pokazać takie zapytanie na żywym przykładzie.... |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
no trzeba uważać - jak przeciążysz serwer to wybuchnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) to zresztą cecha większości zapytań...
spotkałeś się może kiedyś z pozycją "manual MySQL"? jak nie - polecam google... no i niby jak mam ci pokazać, że przykład działa? wysłać testowa bazę? to ty pokaż co namieszałeś z tym pytaniem (mój przykład działa na 100%...) i pokaż jakie błędy ci wyskakują... a skoro nie rozumiesz nazw działów, to sobie zrób:
i obejrzyj wyniki... |
|
|
![]() ![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
hmm,
rozumie nazwy działów i właśnie dlatego uważam że się trochę zapędziłeś. Napisałeś je nie w tej kolejności.... Co do problemu, u mnie każdy dział to osobna tabela, idąc tym tropem chyba nie potrzebuje zapisu ''nazwa działu 1' AS `dzial`, wiec go usunąłem , wtedy MySQL krzyczał że nie poprawna składnia z GROUP BY i ORDER BY, więc usunąłem to, i zadziałało, ale dane są nie poprawne i przekłamane, pokazuje mi w komórkach takie rzeczy które wiem że są w zupełnie innych komórkach. Czy można za pomocą UNION jakoś te dane pogrupować i odpowiednio po sortować? I jak mogę rozróżnić że dane pochodzą z tabeli newsów a nie innej ? Z tego co widzę wyniki są nie rozróżnialne. Oto moje zapytanie na 3 tabelach:
Jak usuniesz łączenie do tabeli comments i ostatni wpis count() oraz ORDER BY i GROUP BY to to zapytanie z UNION zadziała. Z kolei jak usuniesz UNION ALL to uzyskasz 3 zapytania SELECT zgrupowane i posortowane, (grupuje) bo do każdego rekordu muszę jeszcze zaczytać ilość komentarzy. Ten post edytował Sokrates 19.11.2008, 00:27:13 |
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
wybacz, ale pytanie twoje brzmiało:
Cytat Witam, mam takie pytane, czy jest możliwe w jednym zapytaniu wyciągnąć szukane słowo ale z wielu tabel? na co dostałeś prostą i jasną odpowiedź - (pomijając fakt, że nadal kompletnie nie rozumiesz o co chodzi z nazwami działów...) ani słówka nie wspomniałeś, że potrzebujesz oprócz tego te dane pogrupować, policzyć i posortować i połączyć z komentarzami... ale niech będzie, mam dobry dzień, to ci wyjaśnię skąd się wziął twój kłopot. z niepotrzebnego rozbicia tych takich samych danych do różnych tabel (twoje działy). wszystkie wspólne dane powinieneś trzymać w jednej tabeli z dodaną kolumną `dzial_id` powiązaną z tabelą `dzialy` gdzie przechowywałbyś ich nazwy. wtedy twoje zapytanie byłoby prostym selektem z jednym joinem do komentarzy, z jedną klauzulą where, z pojedynczym grupowaniem i sortowaniem. i byłoby niezależne od aktualnej ilości działów w serwisie... |
|
|
![]() ![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 96 Pomógł: 0 Dołączył: 11.09.2006 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Może i masz racje....
ale... w tym przykładzie widzisz tylko wspólne komórki, oprócz tego każden dział (tabela) posiada unikatowe komórki dla każdego z działów (Newsów, Pliki, Bloga,itd...). Nie trzymam nigdzie w komórkach informacji o dziale bo w zależności od działu sięgam do odpowiedniej tabeli. Więc z mojego punktu widzenia tworzenie tabeli z 50 komórek z czego wykorzystywanych jest tylko 10 jest nie optymalnym podejściem. No i wracając do sensu pytania z pierwszego postu, to muszę powiedzieć że twoja ostatnia odpowiedz nic nie wnosi do tego tematu. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 05:47 |