SQLite

2010-06-22 10 views
5

के साथ फ़ील्ड द्वारा ऑर्डर करें मैं वास्तव में काम पर सिम्फनी प्रोजेक्ट पर काम कर रहा हूं और हम अपने खोज इंजन के लिए लुसीन का उपयोग कर रहे हैं। मैं यूनिट परीक्षणों के लिए SQLite इन-मेमोरी डेटाबेस का उपयोग करने का प्रयास कर रहा था (हम MySQL का उपयोग कर रहे हैं) लेकिन मैंने कुछ पर ठोकर खाई।SQLite

प्रोजेक्ट का सर्च इंजन हिस्सा ल्यूसीन इंडेक्सिंग का उपयोग करता है। असल में, आप इसे पूछते हैं और आपको आईडी की ऑर्डर की गई सूची मिलती है, जिसका उपयोग आप अपने डेटाबेस को कहां() क्लॉज से पूछने के लिए कर सकते हैं। समस्या यह है कि क्वेरी में एक ऑर्डर बाय फील्ड (आईडी, ...) खंड है, जिसके परिणामस्वरूप ल्यूसीन द्वारा दिए गए परिणामों के परिणामस्वरूप उसी क्रम में परिणाम होता है।

क्या SQLite का उपयोग करके ORDER BY फ़ील्ड का कोई विकल्प है? या ल्यूसीन के समान परिणामों को ऑर्डर करने का एक और तरीका है?

धन्यवाद :)

संपादित करें:

सरलीकृत क्वेरी हो सकता है इस तरह दिखता है:

SELECT i.* FROM item i 
WHERE i.id IN(1, 2, 3, 4, 5) 
ORDER BY FIELD(i.id, 5, 1, 3, 2, 4) 
+0

क्या आप नमूना प्रश्नों के साथ स्पष्टीकरण दे सकते हैं? – Youssef

+0

http://cakebaker.42dh.com/2008/06/10/order-by-field/ बताता है कि यह MySQL- विशिष्ट वाक्यविन्यास क्या है। –

+0

यह एक सरल प्रश्न के साथ एक समान प्रश्न जैसा दिखता है: http://stackoverflow.com/questions/3303851/sqlite-and-custom-order-by – bmaupin

उत्तर

2

यह काफी बुरा और भद्दा है, लेकिन यह काम करना चाहिए। एक अस्थायी तालिका बनाएं, और लुसीन द्वारा लौटाए गए आईडी की ऑर्डर की गई सूची डालें। आदेश दिया ID की सूची युक्त तालिका में आइटम वाले तालिका में शामिल हों:

CREATE TABLE item (
    id INTEGER PRIMARY KEY ASC, 
    thing TEXT); 

INSERT INTO item (thing) VALUES ("thing 1"); 
INSERT INTO item (thing) VALUES ("thing 2"); 
INSERT INTO item (thing) VALUES ("thing 3"); 

CREATE TEMP TABLE ordered (
    id INTEGER PRIMARY KEY ASC, 
    item_id INTEGER); 

INSERT INTO ordered (item_id) VALUES (2); 
INSERT INTO ordered (item_id) VALUES (3); 
INSERT INTO ordered (item_id) VALUES (1); 

SELECT item.thing 
FROM item 
JOIN ordered 
ON ordered.item_id = item.id 
ORDER BY ordered.id; 

आउटपुट:

thing 2 
thing 3 
thing 1 

हाँ, यह एसक्यूएल लोगों कंपकंपी कर देगा कि की तरह है, लेकिन मुझे नहीं पता ORDER BY FIELD के लिए SQLite समकक्ष के बारे में जानें।

+1

धन्यवाद लेकिन यह थोड़ा अधिक जटिल लगता है :) मैं चाहता था बल्कि इसे सीधे php में करें क्योंकि सूची काफी कम है (30 आइटम अधिकतम)। – DuoSRX

+0

@DuoSRX: हाँ, यह जटिल पर थोड़ा सा है। हालांकि कोशिश करने के लायक है। – Mike

+0

हाँ। खैर मैं वैसे भी आपका जवाब स्वीकार करूंगा;) – DuoSRX