עזרה בבקשה

idanbismut

New member
עזרה בבקשה ../images/Emo53.gif

שלום, אני זקוק לעזרה בנושא תכנות PHP. אי מתמחה בעיקר ב- ASP. אולם לפני מספר חודשים התחלתי ללמוד תכנות PHP בכוחות עצמי, והצלחתי ליצור מספר עמודי קוד בהצלחה. השאלה שלי היא השאלה הבאה: כעת אני מעוניין ליצור מנוע חיפוש מסויים, ברמה מתקדמת, שכדי שאוכל לבצע אותו, אני רוצה לעשות שאילתה מתוצאה של שאילתה קודמת. ב- ASP יכלתי לציין במשפט ה- QUERY / שאילתה: SELECT FROM [name of query] ולא רק SELECT FROM [name of table] השאלה שלי האם זה ניתן לביצוע גם פה ? כלומר האם המשפט הבא יהיה תקין:
<?php $my_query = mysql_query("SELECT my_col1 FROM my_tbl") or die ("Invalid query"); $result = mysql_query("SELECT my_col2 FROM $my_query WHERE bla bla") or die ("Invalid query"); ?>​
כלומר, שאלתי היא האם ואיך אני מבצע שאילתה לשאילתה דרך קוד - הרעיון שאני רוצה הוא לבצע מנוע חיפוש עבור מחרוזת מסויימת, אבל לאחר מכן לבצע סינון ע"פי אות: A,B,C, כלומר אני צריך שאילתה ראשונית לחיפוש הכללי, ועוד שאילתה לגבי התחלת אות %$letter. אשמח אם מישהו יוכל לעזור לי. בתודה מראש, עידן ביסמוט
 

shanor

New member
מממ...

עם המעבר ל- PHP, ולפי השאלה שלך אני מניח שעברת במקביל לעבודה מול MYSQL, בעוד שעם ASP עבדת מול MSQL ואחרים של מיקרוסופט... ובכן, ראשית כל הרשה לי לציין ש-PHP אינה מחייבת אותך לעבוד אך ורק עם MYSQL אלא מאפשרת ודיי בקלות לעבוד עם מאגרי מידע אחרים כדוגמת MSQL. בנוגע לשאלתך, ההבדלים בהם אתה נתקל במקרה זה, אינם נובעים מההבדלים בשפות בין PHP ל-ASP אלא בגלל ההבדלים בין MSQL לבין MYSQL. נכון להיום בגרסאות הרשמיות של MYSQL, אין אפשרות לבצע תת - שאילתות, דבר אשר אכן מתאפשר בMSQL ואחרים. גרסאות ביטא של MYSQL כבר תומכות נכון להיום בתת-שאילתות אך כשמן כן הן, גרסאות ביטא. בעזרת קצת חשיבה יצירתית וחיפוש בפורום כאן ובפורום מאגרי מידע תוכל לראות שאת רוב רובן של השאילתות אפשר לבצע בלי להזקק לתת שאילתות אשר נוטות להגדיל את זמן ביצוע השאילתה, דבר אשר הופך להיות בעייתי כאשר מדובר בשאילתות גדולות ומסובכות. שוב, תזכור, אם יותר נוח לך לעבוד מול MSQL, אין סיבה שתעבוד מול MYSQL (פרט לעובדה ש- PHP ו- MYSQL כמעט נכתבו האחד בשביל השני ועובדים בצורה מוצלחת מאוד ביחד). עכשיו בנוגע לשאיתה שלך, מה שאתה רוצה זו שאילתה שתתן לך את כל המקומות שבהם מופיעה מחרוזת מסויימת איפשהו בשדה, ובנוסף תסדר את התוצאה לפי ABC... אם כן, אז למה בכלל צריך תת שאילתה בשביל זה? אפשר לעשות משהו כמו:
select * from MyTable where TextField LIKE 'MyString' order by TextField...​
מקווה שעזרתי ולו במעט. בברכת הצלחה שנאור.
 

idanbismut

New member
תודה רבה...../images/Emo24.gif

קודם כל הרשה לי להודות לך שנאור על תשובתך המפורטת והמהירה - תודה רבה.
אכן עזרתי לי מאוד, אך לגבי הרעיון שביקשתי, הקושי בביצוע בשאילתה אחת (ייתכן שאולי כן אני אצליח לבסוף, אבל...) הוא שבנוסף לחיפוש הרגיל כפי שציינת בדוגמה הנ"ל, אני רוצה לבצע מיון ע"פי אות. כלומר, לדוגמה: משתמש יקיש טקסט כלשהו לחיפוש, והוא יקבל בעמוד לאחר מכן: נמצאו ** תוצאות חיפוש. לראות תוצאות לחץ על אפשרויות הסינון הבאות: א, ב, ג, ד, ........ ש, ת, הכל כלומר אני צריך חתך של גם חיפוש רגיל כפי שעשיתי בדוגמה למעלה, וגם בדיקה שמבין תוצאות החיפוש המילה תתחיל באות מסויימת. אבל אני פוחד שאם אני אציב את 2 התנאים במשפט אחד, זה יחזיר לי תוצאות של רשומות שמתחילות באות מסויימת, אבל לא מכילות בתוך הרשימה את המילה המבוקשת... ולכן רציתי לבצע תת שאילתה.
לגבי שימוש ב- MY-SQL על פני msql, אני יוצר את הסקריפט הזה עבור אתר מסויים שיש לו כבר מסד נתונים ב- MY-SQL, ואין לי את האפשרות לעבוד עם msql. אני אנסה לראות איך באמת אני יכול לשלב את שינהם במשפט אחד, ללא צורך בשאילתה נוספת.
לא אסיים לפני שאביע הכרת תודה שוב - תודה לך !
 

shanor

New member
מממ...שאלה...

ראשית כל בבקשה. :) שנית, האם יש דרך לעשות את זה בMSQL? שהרי גם שם אתה צריך לבנות משפט בעל שאילתה ותת שאילתה, כאשר התת שאילתה היא בחר את כל מה שמכיל *** והשאילתה (על סמך תוצאות אלו) בחר מתוך התוצאות את...ג... (למשל). משמע לא משנה מה גם כאן למעשה אתה צריך שתי שאילתות (שבמקרה נכנסות לתוך משפט אחד). עדיין, איך התוצאה של שאילתה המורכבת מתת שאילתה אתה מקבל את התוצאות הכלליות של הכל??? הרי, שאילתה המורכבת מתת שאילתה מטרתה לבחור את התוצאות המתאימות לתת שאילתה ואז מתוכן לקחת את התוצאות של השאילתה... בכל מקרה, העיניין של שאילתה שמכילה גם את המחרוזת וגם מתחילה באות מסויימת הוא לא הבעיה (לפחות לא מבחינת התחביר של השאילתה - כך שזה לא אמור להדאיג אותך). כך השאילתה שלך אשר תכיל גם את המילה הרצויה וגם את הסידור על פי ABC (או אפילו רק את התוצאות של אות מסויימת) תביא לתוצאות הרצויות לפחות ברמה הזו של השאילתה. אני עדיין חושב שאולי כדאי ללכת על הרעיון של שתי שאילתות כאשר הראשונה תהיה בטבלה זמנית והשניה תקח את התוצאות משם (בהנחה ואין דרך אחרת "לברוח" מזה ושאילתה אחת לא תתן לך את מה שאתה מחפש). כמו אז, כך גם כעת, בהצלחה. שנאור.
 
למעלה