Как получить все строки из таблицы базы данных, используя идентификатор из поля со списком идентификаторов в Yii? - PullRequest
0 голосов
/ 24 апреля 2018

Я использую PHP, Yii 1.1 и MySql для выполнения проекта.

У меня есть таблица products с полями product_id, product_category_id, product_name, product_image, product_description, etc ...

product_id является первичным ключом, а product_category_id содержит идентификаторы категорий, к которым относится продукт (он может принимать несколько идентификаторов, таких как «1,3,4» какстрока).

Как я могу получить все строки из этой таблицы, чья product_category_id содержит определенное значение?

Например, если таблица выглядит следующим образом:

|  product_id   |   product_category_id  |....
|      1        |           1,3,4        |....
|      2        |           2,5          |....
|      3        |           2,3,6        |....

и мне нужны все строки product_category_id=3, то она должна найти мне первую и третью строки.

Примечание: эта функция противоположна

SELECT * FROM `product` WHERE `product_category_id` IN (1,2,3);

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Вам необходимо использовать функцию find_in_set().Пример для Yii 2.0:

$products = Product::find()
    ->andWhere(new Expresssion('FIND_IN_SET(:category_id, product_category_id)', [
        ':category_id' => $categoryId,
    ]))
    ->all();

Пример для Yii 1.1:

$products = Product::model()
    ->findAll('FIND_IN_SET(:category_id, product_category_id)', [
        ':category_id' => $categoryId,
    ]);

FIND_IN_SET(str,strlist)

Возвращает значение вдиапазон от 1 до N, если строка str находится в списке строк strlist, состоящем из N подстрок.Список строк - это строка, состоящая из подстрок, разделенных символами.Если первый аргумент является константной строкой, а второй - столбцом типа SET, функция FIND_IN_SET() оптимизирована для использования битовой арифметики.Возвращает 0, если str отсутствует в strlist или если strlist - пустая строка.Возвращает NULL, если один из аргументов равен NULL.Эта функция не работает должным образом, если первый аргумент содержит запятую (,).

0 голосов
/ 24 апреля 2018

Используйте GROUP_CONCAT () в Mysql; все строки в таблице добавить в одну строку;

...