簡體   English   中英

SQL選擇命令使用帶逗號分隔ID的字符串

[英]SQL select command using string with comma separated IDs

我在PHP中有一個字符串,例如:

"1234,2345,4567,5676,234,12,78957".....

我想以varchar(30)格式提取這些數字,並在類似的命令上使用它們

SELECT * FROM TABLE_NUM WHERE ID LIKE '%NUM';

其中NUM將具有上述7個字符串。

並且如果可能的話,我也想將'%NUM'中的'%'限制為1-5個字符,即前綴不應大於5個字符。 示例NUM = 1234,ID為(31234,5678956781234),它應僅提供結果中的第一個,而不提供另一個。

因此,我將得到所有匹配行的合並結果。

我該如何實現?

謝謝!

如果該字符串來自數據庫中某個位置的列,則應修復該模式。 設計必須處理子列數據的架構幾乎總是一個壞主意。

如果它是數據庫外部的字符串,而您只想基於各個部分運行查詢,則最好使用DBMS 外部的功能來構造查詢。

例如,在Linux下使用bash

pax> list="1234,2345,4567,5676,234,12,78957"
pax> for i in $(echo $list | sed 's/,/ /g'); do
...>     echo mysql "\"SELECT * FROM TABLE_NUM WHERE ID LIKE '%$i'\""
...> done
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%1234'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%2345'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%4567'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%5676'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%234'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%12'"
mysql "SELECT * FROM TABLE_NUM WHERE ID LIKE '%78957'"

該腳本將顯命令以執行所需的操作(假設mysql是DBMS的正確CLI界面)-只需在開始時刪除echo即可實際執行命令。


對於PHP(根據您的問題編輯),您可以使用explode函數拆分字符串,例如:

$list = "1234,2345,4567,5676,234,12,78957";
$numbers = explode (",", $list);

然后對$numbers每個元素執行查詢。


如果您要查找的是由所有這些值組成的單個結果集,則可以使用其他方法來實現。 一種是使用列表構造一個“超級查詢”字符串,該字符串將為您完成所有工作,然后執行一次。

只需使用or子句將不同的“ sub”查詢合並為一個(偽代碼):

$query = "select * from table_num"
$joiner = " where"
for each $element in $list:
    $query = $query + $joiner + "id like '%" + $element + "'"
    $joiner = " or"
execute_sql $query

最后給您查詢字符串:

SELECT * FROM TABLE_NUM
    WHERE ID LIKE '%1234'
    OR    ID LIKE '%2345'
    :
    OR    ID LIKE '%78957'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM