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

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

RS324 13-10-06 14:20

אתגר חדש : יעילות !
 
שלום אנשים ....

היום רציתי לעשות אתגר שאולי ילמד כמה אנשים, כמה דברים.

רמת האתגר : בינונית +
ידע נדרש : עבודה מול מסד, פעולות על מערכים.

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

החוקים : עליכם למשוך כ 60 רשומות שונות מטבלה(על הרשומות להיות בתוך המערך הראשוני) לתוך מערך בעזרת שאילתה אחת בלבד
ועד 3 פעולות עם פונקציות (למתקדמים). ולאחר מכן להציג את המערך החדש.
* אין לפרסם שאלות שקשורות באתגר בפורום !

אוקי עכשיו אני אסביר :
יש לכם טבלה במסד שנראית ככה :
titleid,title,text

titled = ה ID של השורה
title = כותרת שלפיה אתם צריכים לחפש
text = סתם כתב של השורה יכול להיות פה כל דבר חוץ מ NULL

עכשיו יש לכם מערך שנראה ככה בערך רק עם 60 איברים :
PHP קוד:

$search_titles = array('my title','some other title','hey all','welcome to hosts.co.il'); 

כל האיבירים שנמצאים במערך הזה, נמצאים גם במסד....
במסד צריך להיות 100 שורות
60 מתוכם בתוך המערך שכתבתי הרגע

כמו שאמרתי עליכם למשוך את כל המידע לתוך מערך חדש בעזרת שאילתה אחת בלבד !

קריטריונים להצלחה :
* שאילתה אחת בלבד
* כמה שפחות שורות קוד (השורות שמייצגות את המערך הראשוני לא נחשבות)
* כמה שפחות פעולות ומשחקים עם המערך הראשוני.

עכשיו , זה שזה במערך זה כבר רמז גדול מאד להתחלה.

אני אישית ביצעתי את האתגר עם בערך 3-5 שורות בלבד.

שיהיה לכם בהצלחה.

סיום האתגר : 20/10/06

lalamen 13-10-06 14:56

ולאן שולחים את התשובות?

Elad-A 13-10-06 14:58

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

RS324 13-10-06 15:09

הודעה פרטית אלי....
שימו לב שהמערך הראשוני מכיל כותרות של מסודרת לפי סדר
כלומר האיבר הראשון יכול להיות במקום 100 בטבלה (כאילו שורה אחרונה) וככה הלאה

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

lalamen 13-10-06 15:16

http://wrzil.net/new/12345.php

RS324 13-10-06 15:20

ציטוט:

נכתב במקור על ידי lalamen

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

SELECT FROM `testORDER BY RAND() LIMIT 0,60 

אבל אז הוא יחזיר לך סתם 60 שורות, אתה צריך לקבל בדיוק את ה 60 שורות שיש במערך הראשוני
כלומר שה TITLE שלהם נמצא במערך...

תחשוב על זה ככה אולי זה ייתן קצת אור .... יש לך את ה ID הבאים : 54,77,100,33,25,74,63
עכשיו תמשוך את ה ID הבאים בעזרת שאילתה אחת..

מה שעשית לא נכון.
מצטער.

אהה וגם אין צורך ב FOREACH בסוף...תעשה פשוט PRINT_R
בשביל להציג...סתם בזבוז משאבים

Tomer 13-10-06 15:39

התשובה שלי: http://www.wip.co.il/Hosts/

amirs_5 14-10-06 16:35

ממ קראתי את זה , אבל לא ממש הבנתי.. :\
אתה אומר שיש כבר מערך לדוגמא :
$search_titles = array('my title','some other title','hey all','welcome to hosts.co.il');
גודל המערך 60 .
עכשיו במסד יש 100 רשומות שחייב להיות בהם את הערכים שיש במערך פשוט לשלוף אותם ?

RS324 14-10-06 17:31

תחשוב שיש לך ככה : 14,1,55,88,96,33,25,24
כל אלה הם ID של שורות

עכשיו תמשוך את כל ה ID האלה בעזרת שאילתה אחת.

AFI 14-10-06 23:08

לא ממש הבנתי...
אתה רוצה שאני יבנה לולה שתבנה סטרינג לשאילתה ובוא כל הIDים?!?

amirs_5 15-10-06 00:45

אממ עדיין- מה הבעיה בלעשות שאילתא שתשלוף הכל מהטבלה, ואז להדפיס בעזרת לולאה רק את הנתונים מהמסד שנמצאים במערך ?! =\
או שלא הבנתי נכון :|

Tomer 15-10-06 00:50

ציטוט:

נכתב במקור על ידי amirs_5
אממ עדיין- מה הבעיה בלעשות שאילתא שתשלוף הכל מהטבלה, ואז להדפיס בעזרת לולאה רק את הנתונים מהמסד שנמצאים במערך ?! =\
או שלא הבנתי נכון :|

הבנת נכון, אבל השיטה שלך לא יעילה. תחשוב שיש לך 10000 ערכים במסד, אתה צריך רק 5 - אתה תעבור על כל ה 10000 ?

WebProject 17-10-06 06:18

אני לא בטוח שהבנתי את האתר, תגיד לי אם הרעיון שלי בכיוון:

PHP קוד:

for($i 1$i <= 100$i++){    
    for(
$j 1$i <= 60$i++){
        if(
$i == $array[$j]){
            
// SELECTING
        
}
    }


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

השאלה שלי היא כך, אתה אמרת שעלינו להזדקק רק לשאילתה אחת, פה הלולאה תבצע 60 שאילתות, אז לפי דעתי הרעיון שלי נפסל? :)

RS324 17-10-06 17:30

ציטוט:

נכתב במקור על ידי WebProject
אני לא בטוח שהבנתי את האתר, תגיד לי אם הרעיון שלי בכיוון:

PHP קוד:

for($i 1$i <= 100$i++){    
    for(
$j 1$i <= 60$i++){
        if(
$i == $array[$j]){
            
// SELECTING
        
}
    }


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

השאלה שלי היא כך, אתה אמרת שעלינו להזדקק רק לשאילתה אחת, פה הלולאה תבצע 60 שאילתות, אז לפי דעתי הרעיון שלי נפסל? :)

כן , הוא נפסל כי אתה תעשה שאילתות כמספר האיברים שיש לך במערך
ככה שאם יש לי 100 אלף
אז אני יעשה 100 אלף שאיתות...ממש לא יעיל.

Alon.R 17-10-06 18:45

לא מובן בגרוש.

RS324 17-10-06 18:47

ציטוט:

נכתב במקור על ידי Alon.R
לא מובן בגרוש.

מה לא מובן ? שיש לך מערך עם X רשומות שקיימות ב DB ואתה צריך למשוך אותם בעזרת שאילתה אחת ולהציג את הפרמטרים האחרים שמשכת כמערך לפי ה TITLE ?

Gal Shafrir 17-10-06 19:34

אין לי ממש פתרון בקוד יש לי רק ברעיון משהו כזה:
PHP קוד:

<?Php 
    $row 
mysql_fetch_array($query); 
    
$DB = array (
        
'id' $row['id']; 
);               
    for(
$DB['id']; $DB 101$DB++ ) { 
        echo 
$DB
    } 

    
$query mysql_query('SELECT {$DB['id]} FROM `table`") or die(mysql_error()); 
    echo $query;                             
?>

בכל מקרה, אני לא טוב ב-PHP ניסיתי להעלות השערה.

RS324 17-10-06 20:10

ציטוט:

נכתב במקור על ידי DJ G.S
אין לי ממש פתרון בקוד יש לי רק ברעיון משהו כזה:
PHP קוד:

<?Php 
    $row 
mysql_fetch_array($query); 
    
$DB = array (
        
'id' $row['id']; 
);               
    for(
$DB['id']; $DB 101$DB++ ) { 
        echo 
$DB
    } 

    
$query mysql_query('SELECT {$DB['id]} FROM `table`") or die(mysql_error()); 
    echo $query;                             
?>

בכל מקרה, אני לא טוב ב-PHP ניסיתי להעלות השערה.

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

RS324 21-10-06 16:38

טוב אז הזוכה המאושר הוא Atom-Bomb שהוא היחידי שהצליח לתת פתרון מלא
מקום שני הגיע eLad שנתן פתרון חלקי אבל נכון (כי הוא לא מתכנת ב PHP אבל נסלח לו על כך)

והנה הפתרון :

PHP קוד:

$array = array('title no1' 'title no2' ,'someother title');
$newarray = array();
$query mysql_query("SELECT * FROM titles WHERE title IN (".implode(',',$array).") ");
    while (
$row mysql_fetch_array($query))
    {
        
$newarray[] = $row;
    }
    
print_r($newarray); 

עכשיו להסבר :

הפונקציה IMPLOADE מוסיפה ערך בין כל האיבירים של המערך ובסופו של דבר היא הופכת אותו ל STRING ולכן לאחר השימוש בפונקציה המערך נראה ככה :
PHP קוד:

$somestring "'title no1' , 'title no2' ,'someother title'"

עכשיו השינוי הבא הוא בשאילתה שבה הוספנו את המילה IN שמאפשרת לחפש בריבוי מילים..


מאד פשוט, וחבל שאף אחד לא הצליח לפתור את זה חוץ מ 2 אנשים.

Eli-Hai 21-10-06 17:01

המטלה לא הייתה ברורה בשיט.

RS324 21-10-06 17:49

ציטוט:

נכתב במקור על ידי Eli-Hai
המטלה לא הייתה ברורה בשיט.

היא הייתה ברורה מאד והסברתי אותה אחר כך לכל מי ששאל...

מי שלא יודע לרקוד מאשים את הריצפה...


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

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