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

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

S-Preso 09-03-09 01:40

עזרה - sql Where
 
היי חברה,

בניתי מערכת חיפוש, עכשיו במסד יצרתי 2 תאים:
1 - first_name
2 - last_name

נניח שהתוכן בתוך first_name הוא "רמי" וב - last_name "שוורץ"
עכשיו אם אני אחפש "רמי" אני אמצא אותו, גם אם אני אחפש "שוורץ" עכשיו הבעיה שאני לא אמצע אותו אם ארשום "רמי שוורץ" ביחד.

מקווה שהבנתם את הבעיה,
אשמח לעזרה|Lol|

SniR-S 09-03-09 07:39

תוסיף פשוט שאילתא כזו:
PHP קוד:

$query mysql_query("SELECT * FROM my_table WHERE first_name = '$first_name' AND last_name = '$last_name' "); 

בעצם היא שולפת גם את השם שהוכנס וגם את השם משפחה..
מקווה שעזרתי:-)

Shay Ben Moshe 09-03-09 23:44

לא נראה לי שזה מה שהוא חיפש.
אתה יכול להפריד את "רמי שוורץ" ל"רמי", "שוורץ" ולהריץ שאילתה שכזו:
PHP קוד:

$query mysql_query("SELECT * FROM my_table WHERE first_name = '$first_word' OR first_name = '$second_word' AND last_name = '$first_word' OR last_name = '$second_word' "); 

יש מצב שגם אפשר במקום לעשות OR פשוט לעשות עם מערך, אף פעם לא בדקתי ככה שאין לי מושג.

S-Preso 10-03-09 05:20

ציטוט:

נכתב במקור על ידי Snir Shamka (פרסם 701959)
תוסיף פשוט שאילתא כזו:
PHP קוד:

$query mysql_query("SELECT * FROM my_table WHERE first_name = '$first_name' AND last_name = '$last_name' "); 

בעצם היא שולפת גם את השם שהוכנס וגם את השם משפחה..
מקווה שעזרתי:-)

הכוונה לא הייתה לזה.
ציטוט:

נכתב במקור על ידי The Chosen Generl (פרסם 702166)
לא נראה לי שזה מה שהוא חיפש.
אתה יכול להפריד את "רמי שוורץ" ל"רמי", "שוורץ" ולהריץ שאילתה שכזו:
PHP קוד:

$query mysql_query("SELECT * FROM my_table WHERE first_name = '$first_word' OR first_name = '$second_word' AND last_name = '$first_word' OR last_name = '$second_word' "); 

יש מצב שגם אפשר במקום לעשות OR פשוט לעשות עם מערך, אף פעם לא בדקתי ככה שאין לי מושג.

השאלה איך אני מפריד את מה שהמשתמש כותב באינפוט....;-0

vadimg88 10-03-09 08:14

PHP קוד:




$name_from_post 
$_POST['name'];

$exploded_name explode(' '$name_from_post);

/*

now $exploded_name[0] is the first name and $exploded_name[1] is the last name so we do:

*/


$query mysql_query("SELECT * FROM my_table WHERE first_name = '{$exploded_name[0]}' AND last_name = '{$exploded_name[1]}' "); 


S-Preso 10-03-09 14:28

ציטוט:

נכתב במקור על ידי vadimg88 (פרסם 702192)
PHP קוד:




$name_from_post 
$_POST['name'];

$exploded_name explode(' '$name_from_post);

/*

now $exploded_name[0] is the first name and $exploded_name[1] is the last name so we do:

*/


$query mysql_query("SELECT * FROM my_table WHERE first_name = '{$exploded_name[0]}' AND last_name = '{$exploded_name[1]}' "); 


תודה רבה עובד:);P

Derey22 10-03-09 16:07

ואם השם הוא "אור בן צבי"?אם אני לא טועה הקוד לא יעבוד.
תתחשב גם בזה.

vadimg88 10-03-09 16:13

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

Amits 10-03-09 16:19

ציטוט:

נכתב במקור על ידי Derey22 (פרסם 702246)
ואם השם הוא "אור בן צבי"?אם אני לא טועה הקוד לא יעבוד.
תתחשב גם בזה.

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

vadimg88 10-03-09 16:29

לא הוא יחפש אחר אור ו בן ללא הצבי. לפי מה שרשמתי למעלה.

Derey22 10-03-09 18:32

ציטוט:

נכתב במקור על ידי Amits (פרסם 702248)
לא הבנתי מה הקשר, אם שם המשפחה הוא בן צבי אז הוא ימצא אותו בשדה של שם המשפחה.
אני לא מתכנת, אני פשוט חושב ככה (יכול להיות שאני טועה).

לא הבנת מה הקשר כי אתה לא מבין את הקוד,תגובה מיותרת.

Amits 10-03-09 19:33

ציטוט:

נכתב במקור על ידי Derey22 (פרסם 702264)
לא הבנת מה הקשר כי אתה לא מבין את הקוד,תגובה מיותרת.

התגובה שלי מיותרת? התגובה שלך מיותרת, במקום לכתוב את זה היית יכול להסביר.
ותודה vadimg88 שהסברת לי.

S-Preso 10-03-09 23:15

ציטוט:

נכתב במקור על ידי Derey22 (פרסם 702246)
ואם השם הוא "אור בן צבי"?אם אני לא טועה הקוד לא יעבוד.
תתחשב גם בזה.

אכן נקודה מעניינת ונכונה...

עכשיו למשל אם השם פרטי הוא "אור" ושם המשפחה "בן צבי"
אם אני ארשום "אור" לבד אני אמצא אותו.
אם אני ארשום "בן"/"צבי" אני לא אמצא.

אם אני ארשום ביחד שם פרטי וחצי שם משפחה "אור בן" אז אני לא אמצא.
השאלה מה ניתן לעשות בעניין?|?|
תודה חבר'ה אתם אחלה!|קורץ|

בניה 10-03-09 23:36

ציטוט:

נכתב במקור על ידי S-Preso (פרסם 702290)
אכן נקודה מעניינת ונכונה...

עכשיו למשל אם השם פרטי הוא "אור" ושם המשפחה "בן צבי"
אם אני ארשום "אור" לבד אני אמצא אותו.
אם אני ארשום "בן"/"צבי" אני לא אמצא.

אם אני ארשום ביחד שם פרטי וחצי שם משפחה "אור בן" אז אני לא אמצא.
השאלה מה ניתן לעשות בעניין?|?|
תודה חבר'ה אתם אחלה!|קורץ|

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

sholaman 11-03-09 01:36

למה לא תעשה פשוט LIKE על כל מילה שהוכנסה?
זה יפתור לך כאן את כל הבעיה

S-Preso 11-03-09 02:07

תודה רבה לכולם הסתדרתי:)

Daniel 11-03-09 03:05

ציטוט:

נכתב במקור על ידי sholaman (פרסם 702311)
למה לא תעשה פשוט LIKE על כל מילה שהוכנסה?
זה יפתור לך כאן את כל הבעיה

LIKE? זה לוקח המון המון המון משאבים.


ובנושא והבעייה שהועלתה - שם פרטי הוא מילה אחת. ל-explode יש פרמטר שלישי

S-Preso 11-03-09 03:51

ציטוט:

נכתב במקור על ידי MasterT (פרסם 702319)
LIKE? זה לוקח המון המון המון משאבים.


ובנושא והבעייה שהועלתה - שם פרטי הוא מילה אחת. ל-explode יש פרמטר שלישי

יש תחליף ל LIKE?

vadimg88 11-03-09 08:12

ציטוט:

LIKE? זה לוקח המון המון המון משאבים.
די כבר עם ההמון המון משאבים הזה. LIKE היא פונקציה לכל דבר, אומנם היא תקח קצת יותר זמן, אבל עם העמודה שמחפשים בתוכה מוגדרת כמו שצריך, יש אינדקס כלשהו ומשתמשים ב FULLTEXT אז הכל יההי בסדר. אפשר גם להשתמש ב MATCH AGAINST אם יש תמיכה ב MYSQL 5 ו FULLTEXT. אם זה היה כל כך גרוע MYSQL לא היו מאפשרים שימוש בה.

Hezi & BomBas 11-03-09 12:28

אז למה לא להשתמש ב LIKE ב WHERE של השם משפחה?

עריכה:
לא ראיתי שיש דף שני וכבר הציעו את זה :D

vadimg88 11-03-09 12:30

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

Daniel 11-03-09 13:20

ציטוט:

נכתב במקור על ידי vadimg88 (פרסם 702358)
אפשרי, להשתמש ב LIKE עם כל הטקסט שהוזן ככה הוא ימצא דברים דומים אבל, ומדוייקים פחות. וזה יכול לקחת קצת יותר זמן אם ישנם המון רשומות.

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

PHP קוד:

$name "פלוני אלמוני"



PHP קוד:

list($first$last) = explode(" "$name2);
$DB->query("SELECT age, info FROM tbl_name WHERE firstname='{$first}' AND lastname ='{$last}'"); 

PHP קוד:

$lastnameavl explode(" "$name);
$first array_shift($lastnameavl);

$DB->query("SELECT age,info FROM tbl_name WHERE  firstname ='{$first}' AND (lastname LIKE '%".implode("%' OR lastname LIKE '%"$lastnameavl)."%')"); 


vadimg88 11-03-09 13:24

שאילתה מיותרת. אני פשוט הייתי עושה

PHP קוד:

 LIKE '%{$fullname}%' 


Daniel 11-03-09 13:44

ציטוט:

נכתב במקור על ידי vadimg88 (פרסם 702372)
שאילתה מיותרת. אני פשוט הייתי עושה

PHP קוד:

 LIKE '%{$fullname}%' 


מה LIKE fullname? זה מאורגן ב-2 שדות - first_name ו-last_name לפי הודעתו, עכשיו תשלב את 2 הנתונים?..


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

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