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

הוסטס - פורום אחסון האתרים הגדול בישראל (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)

Itay 28-01-12 18:43

אם תעשה שני LIKE על ה-title זה יהיה יותר הגיוני, במצב שלך - מה אתה עושה אם יש לך ביטוי של 10 מילים?

בכל מקרה, זה לא מוצא לך בגלל שיש הגבלה על אורך של מילה מסויימת בדיוק בגלל מילים כמו to, a, i.. אמורה להיות דרך לשנות את זה, תריץ חיפוש בגוגל

dor77 28-01-12 19:45

כן, צריך לשנות את "ft_min_word_len=4" אבל אני לא מוצא איפה..
חיפשתי בגוגל, זה אמור להיות בקובץ my.cnf..לא מוצא אותו.
השאלה האם אני יוכל לערוך את זה בשרת שאקנה..

בכל אופן לשאלתי, איך שרשמתי מקודם, עם השני like וה- OR באמצע, זה בסדר?

ככה:

PHP קוד:


    $result 
mysql_query("
    SELECT DISTINCT `title` FROM `tutorials` WHERE title LIKE '%$one%$two%' OR title LIKE '%$two%$one%'
    "
); 

ניתן לכתוב ככה?
תודה.

Itay 28-01-12 21:04

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

dor77 29-01-12 09:11

האמת זה עובד ממש טוב, גם בכותרת עם 10 מילים.
אם תקין לרשום כך אז אשאיר כך.
תודה רבה!

Haimz 30-01-12 15:40

אם במקום רווח אתה שם אחוז (%) לא שידעתי על זה, במקום להפריד מילה מילה, לא יותר פשוט להחליף רווח באחוז? לדוגמה משהו כזה:
PHP קוד:

<?php
    $q 
urldecode($_GET['q']);
    
$q str_replace(" ""%"$q);
    
$result mysql_query("SELECT DISTINCT `title` FROM `tutorials` WHERE title LIKE '%" .$q"%'"); 
?>


dor77 30-01-12 16:13

צודק חיים, לא חשבתי על זה..אותו אפקט ויותר פשוט.

תודה!

AlmogBaku 01-02-12 06:13

ציטוט:

נכתב במקור על ידי HHaim (פרסם 833743)
אם במקום רווח אתה שם אחוז (%) לא שידעתי על זה, במקום להפריד מילה מילה, לא יותר פשוט להחליף רווח באחוז? לדוגמה משהו כזה:
PHP קוד:

<?php
    $q 
urldecode($_GET['q']);
    
$q str_replace(" ""%"$q);
    
$result mysql_query("SELECT DISTINCT `title` FROM `tutorials` WHERE title LIKE '%" .$q"%'"); 
?>


זה לא אותו הדבר כי אז הסדר חייב להיות זהה למשל
"aa bb cc"
יהפוך ל
"aa%bb%cc"

יימצא את:
"aa zz bb xx cc"
אבל לא ימצא את:
"bb xx aa zz cc"

Haimz 01-02-12 18:47

ציטוט:

נכתב במקור על ידי AlmogBaku (פרסם 833904)
זה לא אותו הדבר כי אז הסדר חייב להיות זהה למשל
"aa bb cc"
יהפוך ל
"aa%bb%cc"

יימצא את:
"aa zz bb xx cc"
אבל לא ימצא את:
"bb xx aa zz cc"

אני לא הצעתי את הפתרון הזה, כמו שציינתי, לא שמעתי עליו, פשוט הצעתי לו להחליף רווח באחוז אם הוא משתמש בזה.

kobisl 07-02-12 15:32

כמו שנאמר לפניי חיפוש עושים בעזרת הפונקציה MATCH (השדה title צריך להיות fulltext)
אפשר לבחור בנוסף עם הפונקציה LIKE ולסדר לפי רלוונטיות של MATCH
דוגמה:
PHP קוד:

SELECT * ,MATCH (titleAGAINST ('text search') as mach
 FROM table
 WHERE 
(MATCH (titleAGAINST ('text search') OR LIKE '%text search%'
 
ORDER BY mach DESC 

MATCH מחזיר לנו מספר FLOAT בין 0 ל 1 לפי רלוונטיות התוצאה לתשובה.
שים לב ש MATCH מוגדר בברירת מחדל להתעלם ממלים בנות פחות מ 4 אותיות, צריך לשנות בקונפיג ל 3 או 2 בכדי לקבל תוצאות יותר טובות.

dor77 07-02-12 15:44

ואיך משנים את ההגבלה הזאת?
באיזה קובץ?
איפה הוא נמצא?

תודה רבה!


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

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