Выбор постов, где категория похожа на несколько идентификаторов категорий, используя REGEXP

У меня есть строка category IDs это выглядит так 1;2;3;4;,

Теперь я хочу получить все сообщения, которые содержат каждую из этих переменных в category столбец posts Таблица.

category столбец также имеет такое содержание 1;2;3; в зависимости от того, какие категории были прикреплены к сообщению.

Как я могу настроить PDO query который проверяет, находится ли какое-либо значение из первичной строки в пределах category столбец в почтовой таблице?

Я ищу что-то похожее category LIKE = IN (2;3;4;)Также он должен работать с двойными / тройными … цифрами, например так: 2;44;23;,

Пример:

  • Сообщение 1: 1; 2;
  • Пост 2: 3;
  • Пост 3: 1;

Я использую строку 1; получить из таблицы сообщений, и результат, который я хочу вернуть, Post 1 а также Post 3 потому что они оба содержат 1;,

0

Решение

Наилучшим вариантом является рефакторинг таблицы в posts таблица (без поля списка категорий) и posts_categories таблица (с полями post_id и category_id).

Затем используйте простой запрос, подобный этому:

SELECT DISTINCT p.*
FROM posts_categories AS pc
INNER JOIN posts AS p ON pc.post_id = p.post_id
WHERE pc.category_id IN ([your list of values])
;

К сожалению, большинство библиотек баз данных не поддерживают произвольные списки параметров, поэтому вам может потребоваться сгенерировать точную серию ?,?,?,... в коде; но я не знаком с pdo и только немного знаком с php.

Изменить: измененный запрос, чтобы показать только данные из сообщений, и только один раз за сообщение.


Если вы хотите список категорий, а также ….

SELECT DISTINCT p.*
, GROUP_CONCAT(assoc_pc.category_id SEPARATOR ';') AS catList
FROM posts_categories AS filtering_pc
INNER JOIN posts AS p ON filtering_pc.post_id = p.post_id
INNER JOIN posts_categories AS assoc_pc ON p.post_id = assoc_pc.post_id
WHERE filtering_pc.category_id IN ([your list of values])
GROUP BY p.post_id
;

GROUP_CONCAT специфичен для MySQL; если вы хотите немного больше независимости от платформы, вы можете SELECT p.*, assoc_pc.caetgory_id и просто ORDER BY p.post_id и построить catList в коде при обработке несгруппированных результатов.

Изменить: исправлена ​​опечатка, неправильный псевдоним, во втором примере запроса.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]