2015-10-23 127 views
0

我有一個函數返回VARCHARMySQL SELECT WHERE id IN function()

它將始終爲空字符串「」或單個ID「1」或ID「1,2,3,4,5」。

然後,我有這個疑問:

SELECT id, title FROM category WHERE id IN getIds(1); 

但因爲它是作爲一個字符串,例如它只返回的第一個項目。 1,而不是1,2,3。

有沒有辦法告訴MySQL它應該使用它而不是字符串?

回答

1

由於MySQL不支持表值函數。您有2個選擇:

1)使用FIND_IN_SET https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set AND http://www.w3resource.com/mysql/string-functions/mysql-find_in_set-function.php「該函數返回函數的第一個參數中給出的字符串的位置,在第二個參數中給出的字符串中的逗號分隔列表中。列表的第一個元素爲1.如果在該集合中找不到該字符串,則返回0;如果其中一個參數爲NULL,則返回NULL。

SELECT id, title FROM category WHERE FIND_IN_SET(id, getIds(1)) > 0 

2)填充一個臨時表,並與運營商IN

SELECT id, title FROM category WHERE id IN (SELECT Id FROM myTempTable) 

方法#1似乎更適合於這種情況下使用它。

+0

該號碼只是主要類別的ID。 – tttpapi

+0

您也可以嘗試使用set(https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set)中的find,但我建議採用上述方法。通常,您希望最小化SQL中的字符串操作,並使用表比較。使其更易於維護和閱讀。儘可能避免動態SQL。 – Tom

+0

如何返回表格?你能給我一個任何例子的鏈接嗎? – tttpapi

相關問題