我有一个数据库,其中包含电影和每个电影后category
字段是这样写的:8, 12, 16
。这意味着,这部电影是动作片、剧情片等等。这就是我正在做的:
$fields = "id, xfields, category";
$query = $db->prepare("SELECT $fields FROM `dle_post` WHERE `category` IN ($subcatsStr) ORDER BY `date` DESC LIMIT :from, :to");
$query->bindParam(":from", $from);
$query->bindParam(":to", $count);
$query->execute();
现在我想要得到所有的电影,都是动作片(类别ID: 8)。subcatsStr
看起来像这样:
$subcatsStr = "8";
查询只找到电影,category
以8开头,例如movie,其中category
为8,12,47,53
或8,11,12,17,53
。但是当category
是例如12,8
时,它找不到它。我怎样才能使它如我所愿?
我注意到find_in_set
仅当subcatsStr
是单个数字时有效,例如8
,但它没有,当它是8, 12, 16, 19
时。当用户选择顶级类别(例如:movies), subcatsStr
包含许多值,这些值是类别和子类别。解决方案呢?
Use FIND_IN_SET()
SELECT * FROM dle_post
WHERE find_in_set('$subcatsStr', category) > 0
但实际上最好改变你的表设计。永远不要在一列中存储多个值!