Mysql
在多列中搜尋多個值
我有一個包含以下欄位的表格結果:
- ID
- results_id
- number_one (int)
- number_two (int)
- number_three (int)
- number_four (int)
- number_five (int)
每個 number_* 列可以包含一個從 01 到 90 的數字。
我有一個包含 90 個複選框的搜尋表單。使用者最多可以勾選 5 個複選框。
一旦使用者選擇 n 複選框,我需要建構一個查詢來查找包含所有這些值的行,但一個數字可以在五列中的任何一列中。
例子:
使用者勾選複選框 02、12 和 20。我需要檢索所有三個數字的所有行,但我的數字可以在任何 number_* 列中。20 可以在 number_one 列中,02 可以在 number_three 列中,12 在 number_four 列中。如何建構此查詢?
另外,使用一列而不是五列會更好嗎?結果表:
- ID
- result_id
- 數字(字元串)
列號包含 02-12-20-57-84 其中 - 是分隔符。
範例:使用者勾選複選框 02、12 和 20。所以我的查詢是
SELECT * FROM results WHERE numbers LIKE "%02%" AND numbers LIKE "%12%" AND numbers LIKE "%20%";
更新:我目前正在使用 MySQL 進行此設置:
- ID
- results_id
- number_one (int)
- number_two (int)
- number_three (int)
- number_four (int)
- number_five (int)
- 日期
- 城市(外鍵)
我計劃移動尋找優化和更快的替代方案。我可以只為這個特定的表遷移到任何其他數據庫。如果需要,我還可以更改表結構。該表中有大約 150k 條記錄執行類似於以下的查詢:
SELECT * FROM TableName WHERE '02' IN (Number_1, Number_2, Number_3, Number_4, Number_5) AND '12' IN (Number_1, Number_2, Number_3, Number_4, Number_5) AND '20' IN (Number_1, Number_2, Number_3, Number_4, Number_5)
遷移到另一種 DBMS 類型會帶來好處嗎?
我個人會創建你的桌子
- ID
- result_id
- 價值
但是在值列中只有一個值。現在您可以在 value 列上建立索引,這應該會大大加快速度。您的查詢將如下所示:
SELECT result_id FROM TableName WHERE VALUE IN ('02','12','20') GROUP BY result_id HAVING COUNT(1) >= 3
這樣做的好處之一是您現在可以輕鬆檢查 1 個匹配項、2 個匹配項等。您還可以將他們可以檢查的項目數增加到 50 個,並且您的表結構不必更改。
現在這麼說對你不起作用。現在我會使用這樣的東西:
SELECT * FROM TableName WHERE '02' IN (Number_1, Number_2, Number_3, Number_4, Number_5) AND '12' IN (Number_1, Number_2, Number_3, Number_4, Number_5) AND '20' IN (Number_1, Number_2, Number_3, Number_4, Number_5)