Birden fazla anahtar kelime arama komut bazı uzman girişi ihtiyacı

2 Cevap php

I have been writting a keyword search script based on this tutorial: http://www.hackosis.com/2007/11/06/howto-simple-search-engine-with-php-and-mysql/

Sözü Commenters bazıları gibi, script sadece arama açısından son kelime dayalı dönen sonuçları biter. Bu yüzden de başka bir kullanıcıdan önerilerden birini uygulamaya çalıştık, ama şimdi ben sadece ilk arama terimi dayalı sonuçlar elde etmek mümkün gibi görünüyor.

Benim komut dosyası için kodu burada bulunabilir: http://php.pastebin.com/m7759afd3

Sonuçlar için print_r bu gibi görünüyor:

SELECT * FROM blog WHERE blog_title LIKE '%barry%' OR blog_content LIKE '%barry%' AND blog_title LIKE '%child%' OR blog_content LIKE '%child%' AND blog_title LIKE '%help%' OR blog_content LIKE '%help%' ORDER BY blog_title

SELECT * FROM links WHERE link_title LIKE '%barry%' OR link_desc LIKE '%barry%' AND link_title LIKE '%child%' OR link_desc LIKE '%child%' AND link_title LIKE '%help%' OR link_desc LIKE '%help%' ORDER BY link_title

SELECT * FROM pages WHERE page_title LIKE '%barry%' OR page_content LIKE '%barry%' AND page_title LIKE '%child%' OR page_content LIKE '%child%' AND page_title LIKE '%help%' OR page_content LIKE '%help%' ORDER BY page_title

Sunmak mümkün olabilir herhangi bir yardım için teşekkür ederiz.

2 Cevap

Eğer any of the keywords içeren sonuçları dönmek istiyorsanız, o zaman OR ile tüm AND olarak değiştirin.

Bunu yaparsanız anahtar kelimelerin herhangi tablonun herhangi bir sütun var, sonra db kontrol edecektir.

Bu nedenle son sorgu böyle DB sunucu tarafından okunabilir olacaktır:

SELECT * FROM blog WHERE blog_title LIKE '%barry%' OR blog_content LIKE '%barry%' OR blog_title LIKE '%child%' OR blog_content LIKE '%child%' OR blog_title LIKE '%help%' OR blog_content LIKE '%help%' ORDER BY blog_title

ve tüm dönmesi gerektiğini her sütunda anahtar kelimeler (barry, çocuk, yardım) sahip kayıtları (blog_title, blog_content).

Umarım bu yardımcı olur.

AND operatörü OR daha yüksek önceliğe sahiptir, bu yüzden içeren sonuçları dönmek istiyorsanız all of the keywords şu şekilde parantez eklemek gerekir:

  SELECT * FROM blog
  WHERE (blog_title LIKE '%barry%' OR blog_content LIKE '%barry%')
    AND (blog_title LIKE '%child%' OR blog_content LIKE '%child%')
    AND (blog_title LIKE '%help%' OR blog_content LIKE '%help%')
  ORDER BY blog_title