Intereting Posts

MySQL Выберите список в массиве

Каждая статья может иметь неограниченные категории.

Категории сохраняются в базе данных следующим образом:

пример article_category: '1', '3', '8'

ИЛИ

example article_category: '2', '3'

Поэтому, когда я ищу список ниже, скажем, категория 3

$category_id = $_REQUEST['category_id']; //3 $SQL = "SELECT * FROM ARTICLES WHERE article_category = '$category_id'"; 

Если бы это было только одно, то это было бы хорошо.

Я ненавижу это говорить, но я полностью потерял .. Я бы использовал IN?

= (равно) проверить на полную строку. то, что вы хотите сделать, может быть сделано с использованием LIKE и% comodin (это как * для файлов в каталоге или подобных)

 $SQL = "SELECT * FROM ARTICLES WHERE article_category LIKE \"%'$category_id'%\""; 

однако я рекомендую вам нормализовать базу данных и иметь категории в качестве подтаблицы

То, как я буду реализовывать это, – это создать таблицу для категорий, которую вы, вероятно, уже имеете. Что-то вроде:

 cat_id cat_name 1 animals 2 sports 3 locations 

Затем создайте таблицу для привязки статей к категориям. Что-то вроде:

 table artcat article_id cat_id 1 1 1 3 2 1 2 2 2 3 

Вышеприведенная таблица в основном заменяет поле article_category, которое у вас есть. В приведенном выше примере

 article 1 is linked to categories 1 and 3 article 2 is linked to categories 1, 2 and 3 

И когда вам нужно получить все статьи для данной категории, все, что вы будете запускать запрос, например:

 SELECT article_id FROM artcat WHERE cat_id=3 

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

Надеюсь, это поможет. Удачи!

Здесь вы можете использовать FIND_IN_SET , но это может быть не очень эффективно. Я предлагаю вам изменить структуру таблицы и выполнить ответ @jdias.

Если ваша article_category сохранена как 1,2,3 :

 $SQL = "SELECT * FROM ARTICLES WHERE FIND_IN_SET('$category_id', article_category)"; 

Или, если он сохранен как '1','2','3' :

 $SQL = "SELECT * FROM ARTICLES WHERE FIND_IN_SET('\'$category_id\'', article_category)";