Выбор строк из MySQL

0

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

1,3,5

Проблема в том, что я понятия не имею, как я должен выбрать всех рекламодателей в определенной категории, например: mysql_query("SELECT * FROM advertisers WHERE category = ??");

  • 2
    and in that column il store the categories seperated by "," Было бы лучше нормализовать их в отдельной таблице.
Теги:

5 ответов

3

Если categories - это другая таблица базы данных, вы не должны использовать поле обычного текста. Создайте "сводную таблицу" для этой цели, что-то вроде advertisers_categories, которое связывает две таблицы вместе. С настройкой вы можете сделать запрос типа:

SELECT A.* FROM advertisers AS A
JOIN advertisers_categories AS AC ON AC.advertiser_id = A.id
WHERE AC.category_id = 12;

Схема advertisers_categories будет выглядеть примерно так:

# advertisers_categories
# --> id INT
# --> advertiser_id INT
# --> category_id INT
  • 1
    +1 за включение запроса (я не мог вспомнить, как присоединиться к таблицам XD)
  • 0
    Огромное спасибо :)
Показать ещё 1 комментарий
1

Невозможно иметь значения, разделенные запятыми, чтобы делать это строго в SQL-запросе. Вы можете возвращать каждую строку и иметь PHP script, который проходит через каждую строку, используя explode($row,','), а затем if(in_array($exploded_row,'CATEGORY')), чтобы проверить существование категории.

Наиболее распространенным решением является реструктуризация базы данных. Вы думаете слишком двумерно. Вы ищете Многие для многих моделей данных

advertisers
-----------
id
name
etc.

categories
----------
id
name
etc.

ad_cat
------
advertiser_id
category_id

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

Затем запрос SQL захватывает каждую строку из ad_cat с нужной категорией_имя и ищет рекламодателя, идентификатор которого находится в результирующем запросе.

1

Вы должны создать свою базу данных по-другому. Посмотрите Atomicity.
Короткая. Вы не должны хранить свое значение в виде 1,3,5.

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

0

Это очень неправильный способ определения категорий, потому что ваш массив значений не может быть нормализован. Вместо этого определите другую таблицу, называемую КАТЕГОРИЯМИ, и используйте таблицу JOIN для соответствия КАТЕГОРИЯМ с РЕКЛАМАМИ.

Только тогда вы сможете правильно выбрать его.

Надеюсь, это поможет!

0

Ваша реализация as-is будет затруднять и облагать ваши ресурсы сервером тем, что вы хотите.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню