2013-10-10 60 views
0

當您在查詢中,如使用where ...凡在MySQL查詢

SELECT 
ID, A, T 
FROM `table1`    
WHERE (A,T)    
IN ($query) 

有沒有辦法有結果相同的順序查詢?

因此,如果$查詢是( 「大衛瓦罐」, 「大瓦罐」),( 「安妮·史密斯」, 「我的生活」)

結果是有序

342 David Crock Big Crocks 
12 Annie Smith My Life 
+0

有'ORDER BY'子句,但一般來說,數據庫並不能保證它們'將保留數據插入的順序,除非您採取措施添加一些元數據以指示自己排序。 –

+0

很可能它會從第一個主鍵到最後一個從頂部向下搜索。所以如果你的主鍵是ID,它可能會以這種方式顯示結果。我認爲,正如@MarcB B所說,使用order by是控制排序的最佳方法。 –

回答

1

通常你必須在應用程序層進行映射,這是唯一擁有所有相關信息的地方。可以使用TEMPORARY表以正確的順序排序,但最好避免這種情況。

+0

是的 - 這是映射,一直讓我絆倒。我有一個php數組記錄,我與選擇數據匹配,但重音破壞的東西。如果我選擇了「Monae」並且「Monãe」在桌上,它會打。然後,「Monãe」在我的應用程序中不會與「Monae」相匹配,因此失敗。 – Shaun

+0

你想讓它們匹配還是不匹配? – tadman

+1

兩種情況 - 我希望它們在人們使用應用程序時匹配,即Monae會打擊Monãe等,但我不希望它們在創建記錄時匹配,因爲我需要單獨記錄Monãe和Monae - 所以我可以查詢數據庫以獲取記錄的標識以供進一步解析。目前,如果Monãe在那裏,Monae將不會被創建,Monãe的id和行數據會被檢索,而當我的上傳腳本在php數組中尋找Monãe來追加id時,它無法找到它(Monae在陣列中)。我有一個PHP解決方法,但寧願在數據庫級別處理它。 – Shaun

2

如果$ query是一個SELECT語句,則改爲連接。

如果它是一組文字值然後要麼將它們插入到一些排序的臨時表,如自動遞增的ID,做一個加盟+訂單或...

SELECT 
ID, A, T 
FROM `table1`    
WHERE A    
IN ('David Crock', 'Annie Smith') 
ORDER BY LOCATE(A, 'David Crock,Annie Smith'); 

(對不起 - 我之前沒有遇到多值'IN'語句,因此不確定它是如何工作的嗎?它是否工作?)

+1

謝謝你們。是的symcbean - 多值IN語句非常好。我的應用程序一次最多可選擇5000條記錄 - 我發現這是選擇多個特定記錄的最快方式。 – Shaun