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

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

0xfo7d 18-02-09 19:27

PHP | איך לעשות בדיקה אם משתנה שווה למשהו ממערך | כנסו ותבינו
 
אהלן...

יש לי מערך בגודל X (זה דינאמי...לכן מספר המקומות במערך אינו קבוע).

אני מעוניין ליצור שאילתת שליפה ממסד נתונים...בסגנון הבא:
PHP קוד:

$res3 mysql_query("SELECT * FROM `tablename` WHERE `filed`='".$abc."' AND `filed2`='".$part."' "); 

אני בעצם רוצה לשלוף נתונים מהמסד...רק נתונים שהשדה FILED2 שלהם שווה לאחד מהתאים של המערך...

נניח יש לי 3 תאים במערך...ששוים ל:
3,4,7

אז שישלוף את כל הנתונים מהטבלה שבהם השדה FILED שווה ל 3/4/7 .

תודה מראש,
מתן.

tbm 18-02-09 20:00

ציטוט:

WHERE `filed`='".$abc."' AND `filed2`='".$part[0]."' or `filed2`='".$part[1]."' or `filed2`='".$part[2]."'
תנסה ככה

daMn 18-02-09 20:03

implode בשביל פירוק המערך לסטרינג בשביל השאילתא.
SQL IN בשביל החיפוש בשאילתא.

O-B 18-02-09 20:15

לדעתי אתה צריך להכניס את המספרים כך: /1/2/3/ ואז עם like לעשות
PHP קוד:

 $res3 mysql_query("SELECT * FROM `tablename` WHERE `filed` like '\".$abc."  "); 


DvirCohen 19-02-09 00:39

PHP קוד:

$query mysql_query("SELECT * FROM  `tablename` WHERE `field` = '"$abc ."' AND `field2` IN ("implode(","$part) .")"); 


intercooler3819 19-02-09 15:58

ציטוט:

נכתב במקור על ידי O-B (פרסם 698988)
לדעתי אתה צריך להכניס את המספרים כך: /1/2/3/ ואז עם like לעשות
PHP קוד:

 $res3 mysql_query("SELECT * FROM `tablename` WHERE `filed` like '\".$abc."  "); 


לא הייתי נותן לך לתכנת את האתר שלי...
שאילתת LIKE זאת השאילתא הכי כבדה שיש (כמובן שאפשר לשרשר אותה ואז להגדיל את היעילות בצורה אקספוננציאלית אבל זה לא הנקודה)

עדיף לעשות מה שאמרו כאן למעלה
implode עם מפריד של פסיקים בשביל לקמבן סטרינג
ואת כל זה לשלב בשאילתת IN
זה הכיוון

vadimg88 19-02-09 16:10

זה גם לא נכון להשתמש ב LIKE במקרה הזה.

sholaman 20-02-09 00:09

תיצור מחרוזת ואת החלק של הWHERE תיצור עם FOREACH שיעבור על כל ערכי המערך

daMn 20-02-09 00:25

למה אתם מסתבכים סתם, הבאתי פתרון הכי נכון לבעיה.

Labs 20-02-09 00:27

תעשה פשוט
FOREACH
ו JOIN
הפתרון הכי פשוט בישבלך

DvirCohen 20-02-09 13:06

כמה שטויות אתם כותבים פה אלוהים
foreach? like? join?

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

Daniel 20-02-09 13:38

IN זאת התשובה.... למרות, שאני משער,
שגם,
PHP קוד:

$ids "3,4,7";
$query "SELECT field FROM table WHERE id='".explode("' OR id='")."'"

יעבוד (עשיתי את זה בעל פה, אולי טעיתי בתו פה או שם - אבל העיקרון), אבל לפי דעתי IN הרבה יותר יעיל
אבל IN זה מה שמיועד לזה... LIKE? לעבור על כל המערך? אתם יודעים כמה משאבים זה יקח?

daMn 20-02-09 13:45

ציטוט:

נכתב במקור על ידי MasterT (פרסם 699198)
IN זאת התשובה.... למרות, שאני משער,
שגם,
PHP קוד:

$ids "3,4,7";
$query "SELECT field FROM table WHERE id='".explode("' OR id='")."'"

יעבוד (עשיתי את זה בעל פה, אולי טעיתי בתו פה או שם - אבל העיקרון), אבל לפי דעתי IN הרבה יותר יעיל
אבל IN זה מה שמיועד לזה... LIKE? לעבור על כל המערך? אתם יודעים כמה משאבים זה יקח?

מה לעזאזל עשית כאן? |:

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

Daniel 20-02-09 17:49

ציטוט:

נכתב במקור על ידי daMn (פרסם 699200)
מה לעזאזל עשית כאן? |:

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

מה שכונה/חפירות? השאילתה שתורץ במסד נתונים תיהיה
PHP קוד:

SELECT field FROM table WHERE id='3' OR id='4' OR id='7' 


DvirCohen 20-02-09 19:15

ציטוט:

נכתב במקור על ידי MasterT (פרסם 699275)
מה שכונה/חפירות? השאילתה שתורץ במסד נתונים תיהיה
PHP קוד:

SELECT field FROM table WHERE id='3' OR id='4' OR id='7' 


כן, שאילתה כזאת תעבוד לך מראש כשאתה יודע מה הערכים שאתה צריך.
אבל ברגע שאורך המערך לא קבוע, זה לא כזה יעיל..
בכל מקרה, יש פקודה בSQL בשביל זה ופה נגמר הסיפור..

vadimg88 20-02-09 19:17

גם זה לא יעשה את מה שלמעלה כי לא הוספת את הערכים המספריים שנמצאים בתור המשתנה ids$ אל תוך השאילתה.

Daniel 20-02-09 19:34

ציטוט:

נכתב במקור על ידי DvirCohen (פרסם 699285)
כן, שאילתה כזאת תעבוד לך מראש כשאתה יודע מה הערכים שאתה צריך.
אבל ברגע שאורך המערך לא קבוע, זה לא כזה יעיל..
בכל מקרה, יש פקודה בSQL בשביל זה ופה נגמר הסיפור..

תסתכל על התגובה שמעל - נתתי את הסקריפט. אם כבר יש דיון, למה לא להמשיך? =]
ציטוט:

נכתב במקור על ידי vadimg88 (פרסם 699286)
גם זה לא יעשה את מה שלמעלה כי לא הוספת את הערכים המספריים שנמצאים בתור המשתנה ids$ אל תוך השאילתה.

דיברת אליי? למה אתה מתכוון?

vadimg88 20-02-09 19:36

PHP קוד:

$query "SELECT field FROM table WHERE id='".explode("' OR id='")."'"

אני לא רואה פה אזכור למשתנה ids$ שמחזיק בעצם בכל המספרים.

Daniel 20-02-09 19:56

צודק, טעות שלי, זה מה שקורה כשכותבים על רגל אחת עם ה-right-to-left טקסטבוקס בפורום =], טעות שלי.
PHP קוד:

 $query "SELECT field FROM table WHERE id='".explode("' OR id='"$ids)."'"


intercooler3819 20-02-09 19:59

ממ טכנית זה עדיין לא היה תקין כי $ids לא מוגדר אצלך כמערך אבל לא נהיה קיטצ'ים |קורץ|

vadimg88 20-02-09 20:01

נכון, ids$ הוא סטרינג לכן מה שהצגת לא יעבוד. אני חושב שאתה לא ממש יודע מה בידיוק explode עושה. כי ממה שזה נראה אין לך הרבה מושג במה שאתה אומר, לפחות לא מהדוגמאות שאתה נותן.

בניה 20-02-09 20:25

ציטוט:

נכתב במקור על ידי MasterT (פרסם 699293)
צודק, טעות שלי, זה מה שקורה כשכותבים על רגל אחת עם ה-right-to-left טקסטבוקס בפורום =], טעות שלי.
PHP קוד:

 $query "SELECT field FROM table WHERE id='".explode("' OR id='"$ids)."'"


כדי לחסוך כמה ORים כמו במקרה הזה עשו את הפונקציה IN
PHP קוד:

$sql "SELECT * FROM `tbl` WHERE `id` IN(".implode(','$arr).")"


Elad-A 21-02-09 19:25

ציטוט:

נכתב במקור על ידי בניה (פרסם 699299)
כדי לחסוך כמה ORים כמו במקרה הזה עשו את הפונקציה IN
PHP קוד:

$sql "SELECT * FROM `tbl` WHERE `id` IN(".implode(','$arr).")"


מאיזה גירסא של MYSQL הפונקצייה IN קיימת?
כי זכור לי שבעבר ניסיתי להשתמש בזה וזה פשוט לא עבד..

vadimg88 21-02-09 19:38

היא קיימת כבר הרבה זמן אני מניח ש 4.0.2


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

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