我的数据库中有一个名为 categories 的字段,其中包含服装店主题的类别(新品、畅销品、男士、女士、儿童等)
我有一个记录有:New Arrival, Men 我有第二个记录有:New Arrival, Women
我如何查询数据库以仅选择女性或男性?
我已经厌倦了这个:SELECT * FROM products WHERE categories RLIKE [[:<:]]Men[[:>:]]'
这对男性有效,但对女性无效。
好吧,如果您实际上存储的是“Men”或“Women”,那么您的数据库设置不正确
您应该使用链接表让我们说categories
将产品链接到类别。
然后您可以执行以下操作:
SELECT * FROM products p
JOIN categoriesToProducts ctp ON ctp.productId = p.productId
JOIN categories c ON c.categoryId = ctp.categoryId
WHERE c.categoryName = "Men";
你可以使用find_in_set function
,看看这个例子
mysql> select * from fruits;
+-------------------------------+
| fruit |
+-------------------------------+
| banana, apple, orange, grapes |
+-------------------------------+
1 row in set (0.00 sec)
mysql> select * from fruits where find_in_set('banana',fruit);
+-------------------------------+
| fruit |
+-------------------------------+
| banana, apple, orange, grapes |
+-------------------------------+
1 row in set (0.00 sec)
所以尝试类似:
SELECT * FROM products WHERE categories where find_in_set('men',categories)'
确保后面的单词,
完全一样,没有多余的空格
就用这个:
SELECT * FROM products WHERE categories LIKE 'Men%';
SELECT * FROM products WHERE categories LIKE 'Women%';
只使用正确的 %
由于您在选择“女性”时没有问题,因此您可以使用如下查询来解决男性问题:
SELECT * FROM products WHERE categories LIKE '% Men';
只需在字母“M”前留一个空格。
您可能只想简化您的方法。
SELECT * FROM products WHERE categories = 'Men';
SELECT * FROM products WHERE categories = 'Women';
由于“Men”是“WoMEN”的一部分,这可能是您的 sql 出现问题的原因?
但是,由于它引起了我的注意,您的数据库可能包含更长的字符串,您也可以这样做。
SELECT * FROM products WHERE categories = 'New Arrival, Men';
SELECT * FROM products WHERE categories = 'New Arrival, Women';