Mysql

在多列中搜尋多個值

  • February 22, 2021

我有一個包含以下欄位的表格結果:

  • 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)

引用自:https://dba.stackexchange.com/questions/122550