Как выделить несколько значений в одной записи в mysql? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть таблица с множеством столбцов. один из них содержит несколько аргументов, как я могу выбрать поле с одним из этих аргументов. например, мой запрос:

select name from product where product='carpet' and selling='new';

столбец продажи содержит «новый», «со скидкой», ..

Ответы [ 2 ]

3 голосов
/ 12 июля 2020

Вы ищете FIND_IN_SET

Возвращает значение в диапазоне от 1 до N, если строка str находится в списке строк strlist, состоящем из N подстрок. Список строк - это строка, состоящая из подстрок, разделенных символами

mysql> DESCRIBE products;
+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| id      | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| product | varchar(255)     | YES  |     | NULL    |                |
| selling | varchar(255)     | YES  |     | NULL    |                |
+---------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

 
mysql> SELECT * FROM products;
+----+---------+---------------------------+
| id | product | selling                   |
+----+---------+---------------------------+
|  1 | carpet  | new,discounted,hello,worl |
|  2 | fork    | used,other                |
|  3 | plate   | new                       |
|  4 | spoon   | NULL                      |
+----+---------+---------------------------+
4 rows in set (0.00 sec)


mysql> SELECT * FROM products
    -> WHERE product='carpet' AND FIND_IN_SET('new', selling) <> 0;
+----+---------+---------------------------+
| id | product | selling                   |
+----+---------+---------------------------+
|  1 | carpet  | new,discounted,hello,worl |
+----+---------+---------------------------+
1 row in set (0.00 sec)
2 голосов
/ 13 июля 2020

Как и @BentCoder правильно ответил, MySQL имеет специальную функцию FIND_IN_SET(), которая возвращает индекс поля, если значение найдено в строке, содержащей значения, разделенные запятыми.

SELECT * FROM products where product = 'carpet' and 'new' like concat('%',selling,'%');

Или вы также можете попробовать это, добавив запятые слева и справа:

select * from products where product= 'carpet' and CONCAT(',', selling, ',') like '%,new,%'
...