הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   חיפוש בבסיס נתונים: Like מורחב? (https://hosts.co.il/forums/showthread.php?t=94985)

dor77 20-01-12 17:44

חיפוש בבסיס נתונים: Like מורחב?
 
שלום.
נגיד ויש לי משפט:

I want to work.

נניח ואדם חיפוש I want אז הכל בסדר, במידה והוא מחפש I work הוא לא מקבל כלום, למה?

אני רוצה שהחיפוש יהיה מאוד רחב.
חשבתי לקחת את המשפט, לפרק אותו למילים עם explode ואז להריץ LIKE על כל אחד אבל איך עושים זאת? איך מריצים את ה LIKE על כל אחד?

תודה!

אדיר 20-01-12 18:09

תקרא על MATCH AGAINST.

dor77 20-01-12 20:01

בקושי יש על זה מידע..
עשיתי כך:
HTML קוד:

$query = "SELECT * FROM `blabla` WHERE MATCH(`bla`) AGAINST('" . $search . "')"; 
שגיאה..
בטוח שאין שיטה יותר נוחה?

תודה.

Erez | TrustMedia.co.il 21-01-12 19:11

הגדרת את השדה בתור full text field (או משהו בסגנון, לא זוכר בדיוק)?
ויש עוד כל מיני מנועי חיפוש אבל זה הכי פשוט לשימוש שמגיע עם mysql

Itay 22-01-12 19:49

http://phpguide.co.il/%D7%97%D7%99%D...7%9C%D7%90.htm
יש פה הסבר די טוב על זה

זה הרבה יותר יעיל ומדוייק מלהשתמש בלייק, אבל בכל מקרה - את מה שאמרת עושים ככה:
PHP קוד:

<?php
$args 
= array('title''body''author'); // השמות של השדות בדאטהבייס
$query explode(' 'urldecode($_GET['q']));
$where = array();
$where[] = "1"// למקרה שאין כלום בשאילתה, תמיד אפשר לעשות WHERE 1 בלי שיקרה כלום
foreach($args AS $arg)
{
    
$curRun = array();
    foreach(
$query AS $word)
    {
        
$curRun[] = $arg." LIKE '%".mysql_real_escape_string($word)."%'";
    }
    
$where[] = "(".implode(" OR "$curRun).")";
}
$results mysql_query("SELECT * FROM table WHERE ".implode(" OR "$where));
?>

וכמובן שאתה יכול להחליף את ה-OR למ-AND אם זה מה שאתה מעדיף - אבל שוב, זה הרבה פחות יעיל

dor77 25-01-12 16:38

ציטוט:

נכתב במקור על ידי Itay (פרסם 833153)
http://phpguide.co.il/%D7%97%D7%99%D...7%9C%D7%90.htm
יש פה הסבר די טוב על זה

זה הרבה יותר יעיל ומדוייק מלהשתמש בלייק, אבל בכל מקרה - את מה שאמרת עושים ככה:
PHP קוד:

<?php
$args 
= array('title''body''author'); // השמות של השדות בדאטהבייס
$query explode(' 'urldecode($_GET['q']));
$where = array();
$where[] = "1"// למקרה שאין כלום בשאילתה, תמיד אפשר לעשות WHERE 1 בלי שיקרה כלום
foreach($args AS $arg)
{
    
$curRun = array();
    foreach(
$query AS $word)
    {
        
$curRun[] = $arg." LIKE '%".mysql_real_escape_string($word)."%'";
    }
    
$where[] = "(".implode(" OR "$curRun).")";
}
$results mysql_query("SELECT * FROM table WHERE ".implode(" OR "$where));
?>

וכמובן שאתה יכול להחליף את ה-OR למ-AND אם זה מה שאתה מעדיף - אבל שוב, זה הרבה פחות יעיל


תודה אבל החיפוש ממש גרוע!
זה הקוד:

$args = array('title'); //
PHP קוד:

השמות של השדות בדאטהבייס
$query 
explode(' 'urldecode($_GET['q']));
$where = array();
$where[] = "1"// למקרה שאין כלום בשאילתה, תמיד אפשר לעשות WHERE 1 בלי שיקרה כלום
foreach($args AS $arg)
{
    
$curRun = array();
    foreach(
$query AS $word)
    {
        
$curRun[] = $arg." LIKE '%".mysql_real_escape_string($word)."%'";
    }
    
$where[] = "(".implode(" OR "$curRun).")";
}
$results mysql_query("SELECT title FROM tutorials WHERE ".implode(" OR "$where));


while(
$rs mysql_fetch_array($results)) {
    
$cname $rs['title'];
    echo 
"$cname\n";


אם יש לי דבר כזה:

How to plan amazing trip

ואני מחפש: how to amazing
זה לא מוצא..למה?
תודה.

Itay 25-01-12 22:44

תריץ את השאילתא הזאת בדאטהבייס שלך (דרך ה-phpMyAdmin) ותגיד אם זה מחזיר משהו:
קוד:

SELECT title FROM tutorials WHERE 1 OR (title LIKE '%how%' OR title LIKE '%to%' OR title LIKE '%amazing%')

dor77 26-01-12 17:45

כן מחזיר..

Itay 26-01-12 19:47

אז תשנה את זה:
PHP קוד:

$results mysql_query("SELECT title FROM tutorials WHERE ".implode(" OR "$where)); 

לזה:
PHP קוד:

$results "SELECT title FROM tutorials WHERE ".implode(" OR "$where); 

ותדפיס את $results ותרשום פה את הפלט

dor77 26-01-12 19:55

החיפוש יותר נחמד אבל עדיין גרוע בכללי..
למשל יש לי:
How to plan amazing trip

אם אני רושם trip זה מוצא, אם אני רושם plan זה מוצא..אם אני רושם how to plan אז הוא מוצא אותו ממש ממש ממש למטה..כאילו הוא לא הכי רלוונטי כרגע..יש מעליו עשרות שיש בהם רק את המילה how למשל..

לא מבין את זה!
בבקשה עזרה, תודה! :)


כל הזמנים הם GMT +2. הזמן כעת הוא 07:12.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ