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

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

mlnn 18-05-06 20:43

[שאלה] שליפה מידע מבסיס נתונים וסידורו
 
אהלן :)

יש לי בבסיס נתונים: קטגוריה, ID.

עכשיו בבסיס נתונים יש לי:

קטגוריה ID
כדורכגל 1
כדורכגל 2
כדורכגל 3
כדור-סל 4
כדורכגל 5
כדורכגל 6


עכשיו אני רוצה לשלוף את הראשון שנמצא בקטגוריה (כאילו שנוסף אחרון, ID=6) כדורגל, עכשיו זה לא בעיה.. אבל איך אני עושה שלמטה יהיה לינק ל"הבא", שיקשר לID הבא...
למשל אם שלפתי את 6, יהיה לי למטה קישור ל5.
אבל מה אני עושה עם 5? הבא אמור להיות 3...

מקווה שמובן=]

Slash 18-05-06 20:53

אתה פשוט מגדיר משתנה מסוג INT שמייצג את המספר ID שאתה רוצה לשלוף וכל פעם תעשה +1 או -1 תלוי לאיזה כיוון אתה רוצה לזוז .

בנוגע ל5 2 אפשרויות , או שתשנה את השם של השדה או שתעשה
בphp :
PHP קוד:

if(id ==5)
id-=2;
else
id--; 

בASP :
PHP קוד:

if id <>5 then
id
=id-1
else
id=id-2
end 
if 

לא בטוח שזה יעבוד כי כתבתי את זה סתם אבל הבנתה את העיקרון זה הכי חשוב

mlnn 18-05-06 20:56

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

eLad 18-05-06 21:03

שלוף TOP 2 (או LIMIT 2) מהסוף (DESC) ואז פשוט את הראשון שיישלף לך (שזה בעצם האחרון במסד) תציג ובלינק לקישור הבא יהיה לך ה ID של השני שיישלף.

mlnn 18-05-06 21:13

תודה על העזרה :)
אבל אני גם צריך שזה יהיה תלוי במשתנה שאני צופה בו עכשיו...
אם שלפתי 5, הבא אמור להיות 4...
אבל אם שלפתי 4 הבא אמור להיות 3. כמובן שאם זה מסודר אחד אחרי השני.
אבל אם זה לא? אם הסידור הולך ככה:
60
59
40
36
20
19

אז ב60 הבא זה 59, ב59 הבא זה 40, ב40 הבא זה 36, ב36 הבא זה 20...
וההפרשים לא קבועים, משתנים כל פעם...

ואני לא בהכרח מתחיל מהראשון, אני רוצה שגם אם אני אכנס לID 36, זה כבר יהיה לי בהבא את 20...

eLad 18-05-06 21:22

ציטוט:

נכתב במקור על ידי mlnn
תודה על העזרה :)
אבל אני גם צריך שזה יהיה תלוי במשתנה שאני צופה בו עכשיו...
אם שלפתי 5, הבא אמור להיות 4...
אבל אם שלפתי 4 הבא אמור להיות 3. כמובן שאם זה מסודר אחד אחרי השני.
אבל אם זה לא? אם הסידור הולך ככה:
60
59
40
36
20
19

אז ב60 הבא זה 59, ב59 הבא זה 40, ב40 הבא זה 36, ב36 הבא זה 20...
וההפרשים לא קבועים, משתנים כל פעם...

ואני לא בהכרח מתחיל מהראשון, אני רוצה שגם אם אני אכנס לID 36, זה כבר יהיה לי בהבא את 20...

אתה עובד עם mySQL?

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

SELECT fld FROM tbl LIMIT $nId,2 DESC
כאשר nId זה המספור האוטומטי שלך (אני תמיד כות תחילית לפני השם שתסמן לי בדיוק מה סוג המידע ששמור שם, במקרה הזה n מציין number)

מה עשית עם זה בעצם?

השליפה התחילה מה ID שהתקבל והוא ישלוף לך 2 רשומות (את הרשומה של ה ID והזו הבאה אחריה) וככה יהיו לך שני נתונים. הרשומה הראשונה שתצא זה מה שאתה רוצה להציג והרשומה השנייה שתצא היא הרשומה "הבא".

mlnn 18-05-06 21:27

אחלה, תודה רבה :)


יש בעיה קטנה, בשביל להשתמש בLIMIT אני צריך לדעת את המקום של הID שאני שולף...
למשל יש:
70
50
43
12
10
אז בשביל לשלוף את 12, אני צריך לעשות:
LIMIT 3,2
נכון?
אבל איך אני אדע את המקום של זה? (3)?

eXtaZa 19-05-06 06:04

תעשה לולאה שעוברת כל שורה ושורה, ואם 12 לא נמצא, אז x++ , ואם הוא נמצא , תעשה LIMIT באמצעות x . (בהתחלה x שווה ל1)

MasterNir 19-05-06 13:29

כשאתה מסדר לעמודים אתה לא אמור להתחשב ב-ID של כל שורה בטבלה, אלא רק במיקום של השורה ביחס לשאר השורות.
קוד:

LIMIT 0, 1
יחזיר לך שורה אחת, כשהוא מתחיל ממיקום 0, זאת אומרת יחזיר לך את השורה הראשונה.

ה-LIMIT מקבל שני פרמטרים, הראשון הוא מאיזה מספר להתחיל והשני הוא כמה רשומות להחזיר.

בשביל לקחת את התוצאה הראשונה אתה עושה LIMIT 0, 1. בשביל לקבל את התוצאה הבאה בתור (לעמוד השני) אתה עושה LIMIT 1, 1. אתה לא צריך לעבוד עם מספרי ה-ID.

בשביל לקבל רשומות מהסוף ולא מההתחלה אתה מוסיף ל-SQL את המשפט:
קוד:

ORDER BY id DESC
מקווה שהבנת ועזרתי לך.
אין צורך לבזבז משאבים ולהסתבך עם הקוד.

mlnn 20-05-06 11:59

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


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

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