Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]wyszukiwanie osobno słów
tenloginjestzaje...
post
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 1
Dołączył: 20.07.2014

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


Witam
robię wyszukiwanie, które działa prawidłowo ale wyszukuje całą frazę, do rozbicia frazy używam explode - również działa jednak do zapytania sql i tak trafiają dwa słowa jako jedna fraza czyli stoję w miejscu. Dzięki

  1. $search = $_GET['szukaj'];
  2. $text = explode(' ', $search);
  3. $i=0;
  4. foreach($text as $t){
  5. $text[$i] = $t;
  6. $i++;
  7. }
  8. $szukaj2 = implode(' ',$text);
  9. $query = mysql_query("SELECT * FROM `tabela` WHERE `tresc` LIKE '%$szukaj2%' ");
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No bo łączysz to co rozbiles
$szukaj2 = implode(' ',$text);
to nie ma co sie dziwic...

Jak dla kazdego slowa chcesz dac oddzielne LIKE, to masz zrobic tyle LIKE ile masz slow. Petla FOREACH i do dziela (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
CuteOne
post
Post #3





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  1. $search = $_GET['szukaj'];
  2. $text = explode(' ', $search);
  3. $i='';
  4. foreach($text as $t){
  5. $i .= "`tresc` LIKE '%".$t."%' OR "
  6. }
  7. $i = substr($i, 0, strlen($i) - 4); // zrób echo na $i i sprawdź czy wszystko ucieło
  8.  
  9. $query = mysql_query("SELECT * FROM `tabela` WHERE $i ");


Ten post edytował CuteOne 19.01.2015, 13:43:43
Go to the top of the page
+Quote Post
tenloginjestzaje...
post
Post #4





Grupa: Zarejestrowani
Postów: 358
Pomógł: 1
Dołączył: 20.07.2014

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


dzięki ale echo wypisuje OR. Jak zmienię na:
  1. $search = $_GET['szukaj'];
  2. $text = explode(' ', $search);
  3. $i='';
  4. foreach($text as $t){
  5. $i = "`tresc` LIKE $t";
  6. }
  7. $i = substr($i, strlen($i) - 4); // zrób echo na $i i sprawdź czy wszystko ucieło
  8.  
  9. echo $i;


to pokazuje ostatnie 4 znaki frazy

Ten post edytował tenloginjestzajety 19.01.2015, 14:11:37
Go to the top of the page
+Quote Post
adrianpl20
post
Post #5





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 20.02.2014

Ostrzeżenie: (10%)
X----


w foreach dałeś $i = a ma być $i .=
Go to the top of the page
+Quote Post
tenloginjestzaje...
post
Post #6





Grupa: Zarejestrowani
Postów: 358
Pomógł: 1
Dołączył: 20.07.2014

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


niestety problem wciąż aktualny jakby ktoś znał rozwiązanie to byłbym wdzięczny.
Go to the top of the page
+Quote Post
untorched
post
Post #7





Grupa: Zarejestrowani
Postów: 318
Pomógł: 76
Dołączył: 27.12.2011
Skąd: Dąbrowa Górnicza

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


http://ideone.com/WtI3id. Coś takiego?
Go to the top of the page
+Quote Post
tenloginjestzaje...
post
Post #8





Grupa: Zarejestrowani
Postów: 358
Pomógł: 1
Dołączył: 20.07.2014

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


Coś w tym stylu ale nie potrafię tego zintegrować. Mam kolumnę, która zawiera rekordy z treścią;
- Okulary słoneczne tanie
- Buty sznurowane
- jeansowe spodnie męskie


I teraz jak wpiszę w input szukaj "tanie okulary" to jest brak wyników i nie wiem jak to zrobić. Muszę podąć dokładną frazę żeby zobaczyć wyniki.

Próbuje rozbić zmienną $szukaj ale mam problemy z pętlą :/

  1. $query = mysql_query("SELECT * FROM `item` WHERE `tag` LIKE '%$szukaj%' AND ver = '0' AND price <= '$max' AND price >= '$min' OR content LIKE '%$szukaj%' AND ver = '0' AND price <= '$max' AND price >= '$min' OR size LIKE '%$szukaj%' OR material LIKE '%$szukaj%' AND ver = '0' AND price <= '$max' AND price >= '$min' OR gender LIKE '%$szukaj%' AND ver = '0' AND price <= '$max' AND price >= '$min' ORDER BY `$sort` DESC LIMIT $limit,9");


Ten post edytował tenloginjestzajety 21.01.2015, 12:32:56
Go to the top of the page
+Quote Post
phpion
post
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




1. Ignorujesz to, co Ci koledzy piszą - uparcie stosujesz content LIKE '%$szukaj%'. Gdzie to rozbicie na pojedyncze słowa?
2. Uważaj na stosowanie OR'ów w zapytaniach - kłaniają się zasady logiki. Przykładowo 1 AND 2 OR 3 to coś innego niż 1 AND (2 OR 3). W uproszczeniu: elementy połączone OR'em pakuj w nawiasy.
Go to the top of the page
+Quote Post
tenloginjestzaje...
post
Post #10





Grupa: Zarejestrowani
Postów: 358
Pomógł: 1
Dołączył: 20.07.2014

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


  1. $rozbicie2 = explode(' ', $szukaj);
  2. $rozbicie = $rozbicie2;
  3. $i=0;
  4. foreach($rozbicie as $t){
  5. $rozbicie[$i] = 'LIKE'.' '.''%'.$t.'%'';
  6. $i++;
  7. }
  8. echo implode(' ',$rozbicie);
  9.  
  10. if(!empty($max) && !empty($min) && !empty($sort))
  11. {
  12. $limit = ($page-1)*9;
  13. $query = mysql_query("SELECT * FROM `item` WHERE `tag` $rozbicie AND price <= '$max' AND price >= '$min' OR content $rozbicie AND price <= '$max' AND price >= '$min' OR size LIKE $rozbicie OR material LIKE $rozbicie AND price <= '$max' AND price >= '$min' OR gender LIKE $rozbicie' AND price <= '$max' AND price >= '$min' ORDER BY `$sort` DESC LIMIT $limit,9");


Rozbija i wysyła zapytanie do SQL jednak napotkałem na kolejny problem: OR. Nie wiem jak zrobić żeby pojawiał się w zmiennej $rozbicie ale dopiero od drugiego słowa.

Ten post edytował tenloginjestzajety 21.01.2015, 14:36:42
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 12:05