У меня есть поле в моей базе данных, которое называется категориями, которые содержат категории тем для магазина одежды (New Arrival, Top Sellers, Men, Women, Kids и т.д.).
У меня есть одна запись, которая имеет: New Arrival, Men У меня есть вторая запись, в которой есть: "Новое прибытие", "Женщины"
Как я могу запросить базу данных, чтобы выбрать только женщин или просто мужчин?
Я устал от этого: SELECT * FROM products WHERE categories RLIKE [[:<:]]Men[[:>:]]'
Это работает для мужчин, но это не работает для женщин.
Хорошо, если вы на самом деле сохраняете слова "Мужчины" или "Женщины", ваша база данных настроена неправильно
Вы должны использовать связанную таблицу, скажем 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';
Так как "Мужчины" отделены от "WoMEN", это может быть причиной того, что ваш sql имеет проблемы?
Однако, поскольку это было доведено до моего сведения, ваша БД может содержать более длинную строку, которую вы могли бы также сделать.
SELECT * FROM products WHERE categories = 'New Arrival, Men';
SELECT * FROM products WHERE categories = 'New Arrival, Women';
New Arrival, Women
или « New Arrival, Men
в базе данных ... Так что это не сработает ....
Categories
. Связан с таблицей «Products
помощьюFOREIGN KEY
в таблице соединенийProductCategories
. По сути, вы делаете это неправильно. То, что вы делаете, описано в книге «Антипаттерны SQL» , первая глава: Jaywalking.