Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Długie zapytanie SQL
ahold
post 10.07.2009, 22:06:11
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.05.2009

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


Witam,

Mam pewien problem, potrzebuję wydać do serwera SQL za "jednym zamachem" bardzo długoe zapytanie.

Może mieć od 20 - 50 (!sic) parametrów.

Na szczęscie porównywane dane są w 100 % statyczne.

przykład: wyświetl materiały gdzie tytul jest równy "ala ma kota a kot ma ale" .

ma więc zostać wykonane takie coś:
  1. <?php
  2. SELECT xxx from tabela where tytul='ala' OR tytul='ma' OR tytul='kota' OR tytul='a' OR (....)  i tak do ko&#324;ca.
  3. ?>

Przy 50 "ORach" , serwer sqł się wyłożył i uciął w połowie moje zapytanie.
phpMyAdmin pokazał to samo (...) i zignorował resztę która była mniej więcej od połowy.

Pytanie teraz co zrobić.

Próbowałem użyć komendy

  1. <?php
  2. SELECT *, MATCH(tytul) AGAINST ('ala ma kota a kot ma ale') AS wartosc
  3. ?>

Ale, np tekst w stylu kota, był wykrywany przez np kotsa, ktosa, posia, zosia.
Wiadomo że miał inną "wartość" ale nie było jednoznaczne.

W tym wypadku muszę mieć 100 % pewność że wartość się zgadza.

Mogę zrobić to w pętli PHP, ale wysłanie 50 zapytań do serwera bazodanowego pod rząd z tekstem where xxx='xx' end zapytania, obliczenie rezultatu, kolejne zapytanie (...) - w prostej linii spowoduję utratę pracy.- I cachowanie nie pomoże smile.gif



Ewentualnie może Macie jakąś koncepcję, to podam co chce osiągnąć.

Mamy dwa miasta
"poznań", "wrocław".

(nazwa pola = miasto)
teraz mamy pole tytulu
nazwa pola = tytul

i muszę wydrukować z serwera

powtarzające się rezultaty dla 2 miast.

Moja koncepcja zakładała by pobrać napierw jedno miasto, poznań - zrobić listę TOP 50 nazw tytułów " or tytul1 or tytul 2 "

nastepnie zadać to zapytanie dopisujac WHERE miasto=wroclaw, i dostanę listę ile z tych tytułów powtarza się we wrocławiu.

Może dało by się to zrobić na poziomie jednego zapytania SQL.


dokładnie to chcę osiągnąć:


Muszę wydrukowac listę materiałów które sa z "poznania" i "wroclawia" oraz zawierające taki sam tytuł.

Ten post edytował ahold 10.07.2009, 22:22:31
Powód edycji: [erix] się robi
Go to the top of the page
+Quote Post
omeck
post 10.07.2009, 22:29:38
Post #2





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

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


Sorry, myślenie mi się wyłączyło, więc tylko strzelam - może:
  1. <?php
  2. SELECT xxx FROM tabela WHERE MATCH(tytul) AGAINST ('+ala +ma +kota +a +kot +ma +ale' IN BOOLEAN MODE);
  3. ?>


questionmark.gif

oczywiście musisz mieć nałozony fulltekstowy indeks na fole tytul

Ten post edytował omeck 10.07.2009, 22:30:37
Go to the top of the page
+Quote Post
ahold
post 10.07.2009, 22:40:57
Post #3





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.05.2009

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


Witaj kolego,
Dobrywieczór,

MATCH AGAINST nawet przy BOOLEAN.

Wyświetla mi brednie "podobne". Jeżeli uzna że coś "troche pasuje" wciska mi taki rekord.

Mam właśnie teraz te opcję, i zobaczyłem, krzycząc "rany boskie co się dzieje".
Wrzuciło mi rekordy których nigdy nie dodawałem. Patrzę, a to wina właśnie match, bo według jego "wagi" jest podobne.
Do wyszukiwania tekstu, to fajna opcja, ale nie do porównywania rekordów.
Mówię nawet + i boolean nie pomogł.
Go to the top of the page
+Quote Post
maly_swd
post 10.07.2009, 22:46:14
Post #4





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


a takie cos?
SELECT xxx from tabela where tytul in ('ala', 'ma', 'kota', 'a', 'kot', 'ma', wpier...')

oczywiscie wczesniej mozesz zoptymalizowac tablice aby nie bylo np 2x 'ma', lub krotkich wyrazow 'a' 'to'...


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
ahold
post 11.07.2009, 08:45:06
Post #5





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 27.05.2009

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


Dziękuję maly_swd, po raz kolejny śmiało mogę stwierdzić że powinni Cie zawieźć do głównego urzędu miar i wag, następnie zamknąć do gabloty jako wzorzec forumowicza php który odkrywając proste metody ułatwia pracę i ratuje życie.

Dziękuję Ci.
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: 19.07.2025 - 08:48