הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 14-10-14, 19:08   # 1
GNS
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Jun 2012
הודעות: 276

GNS לא מחובר  

Arrow שליפת כמה IDS

היי אני רוצה לשלוף מספר IDS אבל בסדר שלי למשל:

קוד:
SELECT * FROM mytable WHERE id IN (3,1,4)
אני רוצה שהסדר שהם יחזרו יהיה
3
1
4
בדיוק בסדר ששלפתי.

מישהו יודע? (מדובר על SQLite)
  Reply With Quote
ישן 14-10-14, 19:36   # 2
אדיר
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Mar 2008
מיקום: אשקלון
הודעות: 1,714

אדיר לא מחובר  

תעשה את זה ב- php.
https://www.google.co.il/#q=user-def...ay+sorting+php

תחזיק מערך עם כל ה- IDs האלו, תשפוך אותו לשאילתה ואז כשאתה מקבל את התוצאות תרוץ עליהן עם פונקצית sorting משלך ותסדר את הרשומות שחזרו בהתאם למיקום של ה- id במערך המקורי.
פונקצית המיון מקבלת כל הזמן 2 פרמטרים, האיבר הנוכחי והאיבר הבא, ובהתאם ל- return value שלה המקומות שלהם מתחלפים. היא ממשיכה לרוץ על המערך עד שכל הרשומות מסודרות כמו שצריך.
  Reply With Quote
ישן 14-10-14, 19:42   # 3
GNS
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Jun 2012
הודעות: 276

GNS לא מחובר  

האמת שבstackoverflow נתנו לי את הפתרון:
קוד:
order by instr(',3,1,4,', ',' || id || ',')
וגם את זה:

קוד:
SELECT * FROM mytable WHERE id IN (3,1,4)
ORDER BY 
CASE 
WHEN id = 3 THEN 1
WHEN id = 1 THEN 2
WHEN id = 4 THEN 3
END
השאלה מה יהיה יותר מהיר - לבצע את המיון בשאילתה או בקוד (JAVA)?
  Reply With Quote
ישן 14-10-14, 19:55   # 4
אדיר
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Mar 2008
מיקום: אשקלון
הודעות: 1,714

אדיר לא מחובר  

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

מבחינת מהירות - ל- 3 תוצאות ההבדל זניח, לכמות גדולה של רשומות צריך לבדוק.
מצד אחד ה- DB אמור להיות מהיר יותר בפעולות מהסוג הזה בהנחה ויש אינדקסים והכל, מצד שני לא עבדתי עם הפונקציונליות הזו וממבט חטוף היא נראית לי לא ממש מתאימה לסוג המיון שאתה רוצה לעשות ובמקרה שיש הרבה תנאים כאלו.
  Reply With Quote
ישן 14-10-14, 22:38   # 5
MAORBARI
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Sep 2008
הודעות: 484

MAORBARI לא מחובר  

ציטוט:
נכתב במקור על ידי GNS צפה בהודעה
האמת שבstackoverflow נתנו לי את הפתרון:
קוד:
order by instr(',3,1,4,', ',' || id || ',')
וגם את זה:

קוד:
SELECT * FROM mytable WHERE id IN (3,1,4)
ORDER BY 
CASE 
WHEN id = 3 THEN 1
WHEN id = 1 THEN 2
WHEN id = 4 THEN 3
END
השאלה מה יהיה יותר מהיר - לבצע את המיון בשאילתה או בקוד (JAVA)?
האופציה הראשונה ממש נראית לי מתאימה לך, אתה יכול לבנות שאילתה דרך JAVA שתחליף פשוט את הערך של ',3,1,4,' לפי סדר משתנה ולפי נתונים משתנים, בסך הכל אתה יכול לעשות שאילתה יותר דינמית מאשר בשאילתא השניה. יתך מכך, עם נסיוני נוכחתי לדעת שבד"כ עדיף לעשות שאילתא מורכבת מאשר קוד צד שרת מורכב, לאמת יותר את המסד שאמור לדעת להתמודד עם שליפות כאלה באופן מהיר ויעיל מאשר שרת שישתמש בפונקציות רבות כדי להגיע לתוצאה די פשוטה.
לשיקולך, תמיד אפשר להחליף משאילתא לשרת ולהפך.
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


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

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