[PHP][MySQL]Jaka jest maksymalna długość zapytania??

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
emuace
Posty: 14
Rejestracja: pt sty 06, 2006 11:52 am
Kontakt:

[PHP][MySQL]Jaka jest maksymalna długość zapytania??

Post autor: emuace »

Mam tabelkę, z której trzeba wyciagnąć konkretne rekordy (każdy oznaczony unikalnym id). Problem w tym, że tych rekordów może być bardzo dużo i serwerowi może się nie spodobać zapytanie typu

Kod: Zaznacz cały

SELECT * FROM tabela WHERE id=1 AND id=2 AND id=5 AND (150 podobnych warunków)
Wysyłanie osobnego zapytania dla każdego rekordu z osobna to też nie jest dobry pomysł. A może się mylę?? Najlepsze rozwiązanie jakie mi przyszło do głowy to podzielenie jednego długiego zapytania na zestaw krótszych (ilość w zależności od potrzeb). Muszę wiedzieć, na jakie części mam dzielić zapytanie. A może są lepsze metody??
the_foe
Przelotem
Przelotem
Posty: 295
Rejestracja: pt sty 31, 2003 12:53 pm
Lokalizacja: Wałbrzych
Kontakt:

Re: [PHP][MySQL]Jaka jest maksymalna długość zapytania??

Post autor: the_foe »

takie zapytanie z punkty widzenia logiki jest bez sensu bo zawsze nic nie zwroci!
dane o id musza skads pochodzic wiec najprosciej wrzucic zapytanie w petle a wynik ladowac do arraya.
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

Re: [PHP][MySQL]Jaka jest maksymalna długość zapytania??

Post autor: 123456 »

Do powyższego faktu (błędny operator logiczny), chciałbym dodać, że potrzeba stosowania bardzo długiego zapytania (nie złożonego tylko długiego) jest wynikiem złego zaprojektowania bazy.

Zazwyczaj w jednym zapytaniu wyciąga się dane, które odpowiadają pewnym kryteriom. Skoro chcesz z jednej tabeli wyciągnąć rekordy o podanych ID, tzn., że albo wyciągasz dane nie powiązane ze sobą albo nie wiem co chcesz osiągnąć...

Może da się znaleźć inne zapytanie, które da taki sam wynik? Warto sprawdzić czy nie istnieje jedno kryterium po którym można rozpoznać dane rekordy.
emuace
Posty: 14
Rejestracja: pt sty 06, 2006 11:52 am
Kontakt:

Re: [PHP][MySQL]Jaka jest maksymalna długość zapytania??

Post autor: emuace »

lista rekordów pochodzi z innej tabelki. To wygląda mniej więcej tak: są dwie tabelki przechowujące listę treści. W jednej z nich cidy (Content ID) się powtarzają, bo np. ta sama treść może występować w 2 różnych językach i w każdym nich może mieć np. różne tytuły. Ale takie ustawienia jak uprawnienia (na które składa się kilka informacji) ładuje się już z drugiej tabelki, bo są one wspólne dla każdej treści niezależnie od języka. Puszczenie tego w pętli mi nie do końca odpowiada, bo wtedy wysłałbym do bazy mnóstwo zapytań dla jednego skryptu. A jeśli chodzi o operator logiczny to się pomyliłem. Miało być OR, ale pisałem posta na szybko :oops:
Istotnie da się inaczej zaprojektować tabelkę i chyba to tak załatwię, niestety czeka mnie dużo przerabiania programu.... :?
ooo_michal
Przelotem
Przelotem
Posty: 245
Rejestracja: śr kwie 18, 2007 9:06 am

Re: [PHP][MySQL]Jaka jest maksymalna długość zapytania??

Post autor: ooo_michal »

Z tego co wiem pomóc mogą Ci złączenia ale nie jestem w stanie opisać jak ich użyć więc odsyłam do literatury.
Polecam książkę wydawnictwa Helion PHP5 i MySQL. Biblia.

Wrzuć tu kawałek tych tabelek. Może znajdę chwilkę i poszukam rozwiązania.
emuace
Posty: 14
Rejestracja: pt sty 06, 2006 11:52 am
Kontakt:

Re: [PHP][MySQL]Jaka jest maksymalna długość zapytania??

Post autor: emuace »

tabelka CONTENTS:
- id - identyfikator contentu w tabelce
- cid - content ID - jako, że w tej tabelce contenty mogą sie powtarzać (i różnią się językami, a co za tym idzie tytułami, tagami...)
- title - tytuł
- tags - tagi dla wyszukiwarki
- language - język
- mid - ta tabela to jedynie indeks treści, treści same w sobie będą pobierane z tabelek konkretnych modułów, do których treści przynależą; mid określa ID w tych tabelkach


tabelka CONTENTS_SCS (Shared Contents Settings)
- cid - jak wyżej
- module - obsługujący modół
- group1, group2, group3, group4, group5 - grupy, wg których można posortować treści; oczywiscie nie trzeba wykorzystywać wszystkich pięciu, często wystarczy jedna
- uid - User ID
- gid - Group ID
- perm - 3-cyfrowa liczba określająca uprawnienia, podobnie jak ma to miejsce w UNIKSIE; pierwsza liczba określa uprawnienia właściciela, druga grupy użytkowników "posiadających" treść, a trzecia pozostałych użytkowników; 0:nie może nic, 1:może odczytywać,2:moze zapisywać, 3:może wszystko

przykłądowa tebelka contents

id | cid | title | tags | language | mid
1 | 1 |Testowa treść| testowa, tresc | polski | 2
2 | 3 |tresc testowa 2| <puste> | polski | 3
3 | 3 |Test title| <puste> | english | 11
4 | 2 |Test title 2| <puste> | english | 9





przykładowa tabelka contents_scs:

cid | module | group1 | group2 | group3 | group4 | group5 | uid | gid | perm
1 | testowy | test | <puste> | <puste> | <puste> | <puste> | 1 | 1 | 233
3 | <puste> | test | <puste> | <puste> | <puste> | <puste> | 1 | 2 | 230
2 | <puste> | test2 | <puste> | <puste> | <puste> | <puste> | 1 | 1 | 222
ODPOWIEDZ