שאלה

White Trash

New member
שאלה

אהאלן, ברשותכם שוב שאלה אני מדפיס תוצאות של שאילתה בצורה הבאה
$query = "SELECT * FROM table"; $result = mysql_db_query("$db_name","$query"); while ($row = mysql_fetch_object($result)) { echo $row->field; }​
השאלה שלי פשוטה מעוד איך אני עובר לשורה הבאה בתוך ללואת ה WHILE אם נניח אני רוצה להדפיס שלוש שורות בכול מעבר בלולאה, נניח באמצעות לולאת FOR, אבל איך אני יכול לעבור לשורה הבאה. מקווה שהצלחתי להבהיר את השאלה ואם לא אני אשמח לפרש תודה
 

White Trash

New member
אפשרות

פתרון אחד שמצאתי הוא:
while ($row = mysql_fetch_object($result)) { for ($i=0; $i<3; $i++) { echo $row->field; if ($i<2) { $row = mysql_fetch_object($result); } } }​
בבקשה תגידו לי שיש פתרון יותר אלגנטי
 

N i X

New member
למה זה לא אלגנטי?

הרי גם בwhile, כל סיבוב של הלולאה, הוא קורא לפונקציה mysql_fetch_object בשביל לקבל ערך חדש ל$row, אז פה אתה עושה אותו דבר רק עם for.
 

White Trash

New member
הייתי רוצה

פתרון יותר אלגנטי יהייה כזה שלא יהייה צריך את ה IF משהוא בסגנון: א. ספירה של כמות השורות ב. לולאה כל עוד X קטן ממספר השורות ג. רישום שורה X, X+1, X+2 (בלולאה) ד. חזרה ל-ב למה זה יותר אלגנטי, ואללה קשה לי להסביר כרגע אולי זה לא. אם מישהוא מעוניין אפשר לפתוח דיון בנושא.
 

N i X

New member
לא ממש הבנתי...

אם אתה צריך 3 תשובות, למה שפוט לא תבקש מהSQL 3 תשובות? או שתגביל את הלולאה ל3. למה זה טוב ה3 תשובות בבת אחת?
 

White Trash

New member
הבהרה

משום שאני מעוניין בטבלה שתכיל את התוצאות כל שורה בטבלה תכיל שלוש שורות מה DATABASE
 

orenphp

New member
אני לא בטוח שהבנתי אבל....

מה רע לדוגמא בזה: $query = "SELECT * FROM table"; $result = mysql_query($query); For($counter=0, $i=0; $counter<3 && $row = mysql_fetch_object($result); $i++) { echo $row->field; } די פשוט לא? מקווה שזה "אלגנטי" מספיק
 

orenphp

New member
סליחה, הנה הקוד בצורה מובנת יותר

$query = "SELECT * FROM table"; $result = mysql_query($query); For($counter=0, $i=0; $counter<3 && $row = mysql_fetch_object($result); $i++) { echo $row->field; }​
 

orenphp

New member
עכשיו שאני קורא את זה לעומק...

אני מבין שאתה רצית לעשות משהו טיפה שונה - רצית להדפיס בעצם כל פעם 3 תוצאות במכה. אם כך אתה יכול לקחת את הקוד שכתבתי וליישם אותו בתוך לולאה נוספת של For ובא גואל לציון (אני לא מבין את הצורך שלך בזה, לדעתי הצורה די לא מובנת - אני מניח שהבעיה נובעת מצורת יישום של מבנה הטבלאות במסד הנתונים) אנא תתן דוגמא לסוג הפלט שאתה רוצה להציג ומדוע בחרת דווקא בצורה זו ואני מניח שיתנו לך כאן פתרונות יותר יעילים/"יפים".
 

White Trash

New member
מה שרציתי לעשות - ואיך עשיתי זאת

זה בעצם לא כזה מסובך ואני כבר מצאתי לזה פיתרון מסוג מסויים, בכול אופן, אני מעוניין לצייר טבלה בעלת שלושה טורים, ובכל תא (שלוש ביצים ??) נתון. השאלה היתה איך לעבור לשורה הבאה ב DB מתוך לולאת ה- WHILE. בסופו של דבר החלטתי לפתור את הבעיה בצורה הבאה:
if($i % $columns == 0) { //if there is no remainder, we want to start a new row echo "<TR>\n"; } ... // the writing of the field comes here if(($i % $columns) == ($columns - 1) || ($i + 1) == $num_rows) { //if there is a remainder of 1, end the row //or if there is nothing left in our result set, end the row echo "</TR>\n";​
ולמה זה לדעתי הכי אלגנטי - כנראה משום שיש לי משתנה אחד ששולט בצורה הגיונית על מספר העמודות. זהוא בעצם.
 
למעלה