[英]Search ids in comma separated string with an input comma separated string
[英]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.