我有一個表格,其中包含很少id的列,這些列已通過多選select語句放入數據庫中。列例如包含:1,4,5,7,9。是否可以通過MySQL查詢來檢查此列是否包含例如數字5或不包含在其中? 我需要選擇所有編號爲5或列在該字段中的其他人,並通過php打印出來。檢查mysql字段是否包含mysql查詢中的某個數字
回答
http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_find-in-set
SELECT ...
WHERE FIND_IN_SET(5, list_column)
但要知道,這搜索勢必是非常慢的。它不能使用索引,它會導致完整的表掃描(讀取表中的每一行)。隨着表的增長,查詢將變得無法緩慢。
請閱讀我的回答Is storing a delimited list in a database column really that bad?
您可以使用@ MikeChristensen的回答更加標準。與標準的SQL另一個竅門是:
select * from TableName
where ',' || ids || ',' LIKE '%,5,%'
(標準SQL,||
是字符串連接運算符,但在MySQL,你必須SET SQL_MODE=PIPES_AS_CONCAT
或SET SQL_MODE=ANSI
來獲取行爲)
另一個MySQL-具體解決方法是使用一個特殊的字邊界正則表達式,將匹配逗號標點符號或串的開頭/結束:
select * from TableName
where ids RLIKE '[[:<:]]5[[:>:]]'
這些解決方案中沒有很好地擴展;他們都會造成表掃描。對不起,我明白你不能改變數據庫設計,但是如果你的項目接下來需要加快查詢速度,你可以告訴他們,如果不重新設計表格,這是不可能的。
我知道正常的形式:)而且我知道這是不好的。但系統已經由其他人創建,我無法改變它。相信我,我會讓數據庫正常,如果我可以:D。感謝這個功能是好的:)。我會在10分鐘內接受這個答案:) –
'+ 1'爲內置'mySql'功能..我會離開我的答案,因爲它更*標準* .. –
超級回答,完美工作。投票。謝謝 ! –
也許:
select * from TableName
where ids = '5' -- only 5
or ids like '5,%' -- begins with 5
or ids like '%,5' -- ends with 5
or ids like '%,5,%' -- 5 in the middle somewhere
它可能不會對大量數據的速度非常快。我建議將這些多選擇值標準化到一個新表中,其中每個選擇是一個單行,並鏈接到TableName
。
- 1. 檢查MySQL列是否包含字符
- 2. MYSQL檢查字段是否包含符號並刪除
- 3. MySQL檢查列是否包含來自字符串的字
- 4. 檢查輸入字段是否包含@
- 5. 如何檢查html是否包含與iMacros的某個數字
- 6. MySql查詢包含字段中的字符串
- 7. mysql檢查是否爲空字段
- 8. Perl檢查一個字符串是否包含mysql時間戳
- 9. 檢查ruby hash是否包含填充的某些字段
- 10. MySQL檢查字段是否爲空,然後運行查詢
- 11. 如何檢查字符串是否包含某個字符?
- 12. Javascript檢查字符串是否只包含某個字符
- 13. 檢查一個字符串是否只包含某些字母
- 14. 檢查一個字符串是否只包含某些字符
- 15. MySQL查詢兩個字段
- 16. 如何檢查mySQL數據庫中的某個字段是否爲空PHP
- 17. PHP檢查MySQL表是否包含值
- 18. 如何查詢包含雙管道字符串的MySQL字段?
- 19. 檢查字段是否包含SQL中的特殊字符
- 20. 檢查文本字段是否包含javascript中的字母
- 21. 檢查數組是否包含字符
- 22. PHP MySQL檢查字符串中是否只包含前幾個字符的查詢
- 23. 如何檢查是否文本字段包含羅馬數字
- 24. 檢查字段是否包含任何數字?
- 25. 如何檢查一個TextView是否包含某個字符串
- 26. javascript檢查一個元素是否包含某個字符串
- 27. 如何檢查一個字符串是否包含一個子字符串 - mysql
- 28. 如何檢查一個整數是否包含c#中的某個數字?
- 29. Numpy:如何檢查數組是否包含某些數字?
- 30. MySQL查詢包含
這絕對有可能。你可以用LIKE語句來做到這一點;儘管如果你的數據庫設計被標準化了,對你來說會更容易些。 – andrewsi