
07-07-2010, 12:01
|
|
|
|
חבר מתאריך: 25.08.03
הודעות: 9,114
|
|
מס' פתרונות לא נוחים ולא יעילים במיוחד:
1. להשתמש בתת שאילתה ובשרשור מחרוזות (כדוגמת: CONCAT_GROUP, || או פונקציית/תחביר שרשור אחרת).
לדוגמה:
קוד:
SELECT
(SELECT c.id || "\n" || c.name || "\n" || i.id || "\n" || i.title FROM categories c JOIN items i ON c.id=i.category WHERE c.id=1) AS C1,
(SELECT c.id || "\n" || c.name || "\n" || i.id || "\n" || i.title FROM categories c JOIN items i ON c.id=i.category WHERE c.id=2) AS C2,
(SELECT c.id || "\n" || c.name || "\n" || i.id || "\n" || i.title FROM categories c JOIN items i ON c.id=i.category WHERE c.id=2) AS C3
LIMIT
4
כפי שניתן לראות, לא מדובר בקוד אופטימלי ומומלץ.
אין מיון, הקטגוריות קבועות - יש צורך להתאים את השאילתה בהתאם לשינויים בטבלת הקטגוריות (הסרה או הוספת קטגוריות).
אולי זה יהיה שימושי במקרים של חוסר ברירה.
2. שימוש במספר שאילתות נפרדות וחיבורם באמצעות UNION.
קוד:
SELECT c.id AS catid, c.name AS catname, i.id, i.title FROM categories c JOIN items i ON c.id=i.category WHERE c.id=1 LIMIT 4 ORDER BY c.displayorder DESC
UNION
SELECT c.id AS catid, c.name AS catname, i.id, i.title FROM categories c JOIN items i ON c.id=i.category WHERE c.id=2 LIMIT 4 ORDER BY c.displayorder DESC
UNION
SELECT c.id AS catid, c.name AS catname, i.id, i.title FROM categories c JOIN items i ON c.id=i.category WHERE c.id=3 LIMIT 4 ORDER BY c.displayorder DESC
3. שימוש בתהליך פנימי/מאוחסן.
מישהו מוזמן לכתוב פורצדורה, אשמח אם היא תתאים ל-MySQL ו-SQLiteת בהם נכון להיום עיקר השימוש שלי 
|