我的数据库中有一个名为类别的字段,其中包含服装店主题的类别(新品上市,热门卖家,男士,女士,儿童等)
我有一条记录:New Arrival,Men 我有第二个记录:新到货,女性
我如何查询数据库以选择女性或男性?
我已经厌倦了这个:SELECT * FROM products WHERE categories RLIKE [[:<:]]Men[[:>:]]'
这对男性有用,但对女性不起作用。
答案 0 :(得分:4)
如果您实际存储“男性”或“女性”字样,那么您的数据库设置不正确
您应该使用链接表,让我们说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";
答案 1 :(得分:1)
只需使用:
SELECT * FROM products WHERE categories LIKE 'Men%';
SELECT * FROM products WHERE categories LIKE 'Women%';
仅使用正确的%
答案 2 :(得分:1)
您可以使用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)'
确保,
之后的单词完全相同,没有额外的空格
答案 3 :(得分:-1)
您可能只想简化您的方法。
SELECT * FROM products WHERE categories = 'Men';
SELECT * FROM products WHERE categories = 'Women';
因为&#34;男人&#34;是#&#34; WoMEN&#34;这可能是你的SQL出现问题的原因吗?
但是,由于引起我注意,您的数据库可能包含更长的字符串,您也可以这样做。
SELECT * FROM products WHERE categories = 'New Arrival, Men';
SELECT * FROM products WHERE categories = 'New Arrival, Women';
答案 4 :(得分:-1)
由于您在选择“女性”时没有遇到任何问题,因此您可以使用以下查询解决问题:
SELECT * FROM products WHERE categories LIKE '% Men';
在字母“M”之前加上一个空格。