0

我的数据库中有一个名为 categories 的字段,其中包含服装店主题的类别(新品、畅销品、男士、女士、儿童等)

我有一个记录有:New Arrival, Men 我有第二个记录有:New Arrival, Women

我如何查询数据库以仅选择女性或男性?

我已经厌倦了这个:SELECT * FROM products WHERE categories RLIKE [[:<:]]Men[[:>:]]'

这对男性有效,但对女性无效。

4

5 回答 5

4

好吧,如果您实际上存储的是“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"; 
于 2012-07-06T14:02:27.557 回答
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)'

确保后面的单词,完全一样,没有多余的空格

于 2012-07-06T14:08:37.673 回答
1

就用这个:

SELECT * FROM products WHERE categories LIKE 'Men%';
SELECT * FROM products WHERE categories LIKE 'Women%';

只使用正确的 %

于 2012-07-06T14:04:59.723 回答
-1

由于您在选择“女性”时没有问题,因此您可以使用如下查询来解决男性问题:

SELECT * FROM products WHERE categories LIKE '% Men';

只需在字母“M”前留一个空格。

于 2012-07-06T14:49:31.160 回答
-1

您可能只想简化您的方法。

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';
于 2012-07-06T14:06:23.903 回答