3

これは私のデータです

385_white   99  swarovski   12  black;blue
386_white   99  swarovski   12  black;blue;green
387_white   99  swarovski   12  yellow;green
389_white   99  swarovski   12  white;silver
385_white   99  swarovski   12  silver

これはクエリの例です

SELECT *  FROM `products` WHERE `category` LIKE 'swarovski' AND `colours` LIKE 'silver'

返される結果は空です。ユーザーが黒を持っていた場合、最初の両方のレコードを返す必要があります。color;color;colorフォーマットを編集する方法はありません。現時点では有料です。

4

2 に答える 2

5

このような非正規化スキーマのペナルティは、正確な一致を保証するためにクエリでより多くの作業を行う必要があることです。

SELECT *  
FROM `products` 
WHERE `category` = 'swarovski' 
AND (
    `colours` = 'silver' 
    OR `colours` LIKE 'silver;%' 
    OR `colours` LIKE '%;silver;%' 
    OR `colours` LIKE '%;silver' 

)

SQLフィドルの例

于 2012-10-01T15:09:43.857 に答える
2

私は単一の比較を行うことを好みます:

SELECT *  
FROM `products` 
WHERE `category` = 'swarovski' and
      concat(';', `colours`, ';') like ';silver;' 

つまり、区切り記号を列の先頭​​と末尾に追加してから、単一のlike.

于 2012-10-01T16:09:00.380 に答える