2

製品エリアを作成しています。すべての製品にいくつかのキーワード IDが含まれています。実装しようとしているのは、製品が選択された場合に、関連する他のほとんどの製品をページの下に表示したいということです。例のデータとしては、

商品ID | 商品名 | キーワード

23     | product1     | 2,4,13
31     | product3     | 2,4,8
10     | product6     | 2,4
11     | product4     | 2,3
34     | product2     | 2,4
54     | product5     | 2,7
12     | product8     | 4,8

キーワード2と4を含む製品の関連製品を表示する必要があるとしましょう。 現在、関連製品を取得するために以下を使用しています

$sql="SELECT * FROM table1 WHERE keywords REGEXP '(^|,)2(,|$)' OR keywords REGEXP '(^|,)4(,|$)' ORDER BY product_id"

ただし、ほとんどが関連する製品が返されない場合があります。

上記の例のデータに関しては、product_id 23,31,10,34は他のレコードよりも優先されるべきです。

それは可能ですか?では、これを克服するにはどうすればよいでしょうか。すべての返信に感謝します。

4

2 に答える 2

1

FIND_IN_SETを使用するだけです

SQLFiddle デモ

select t.*,
SIGN(FIND_IN_SET('2',keywords))+SIGN(FIND_IN_SET('4',keywords))
as FindWeight
from t
where 
SIGN(FIND_IN_SET('2',keywords))+SIGN(FIND_IN_SET('4',keywords))>0
ORDER BY FindWeight DESC
于 2013-03-06T05:23:47.167 に答える
0

leftclickben は、テーブルをどのように構造化すべきかについて正しいです。

ただし、これを続行する場合は、次のようにします

keywords LIKE '2,%' OR keyword LIKE '%,2,%' OR keyword LIKE '%,4,%' OR keyword LIKE '%,4,%'

注意 - カンマとスペースの配置については一貫性を保つようにしてください。

于 2013-03-06T05:18:59.500 に答える