#php #mysql #database-table
#php #mysql #база данных-таблица
Вопрос:
Новичок в PHP / MySQL и создании CMS. Мне нужно знать, как связать статью с несколькими категориями, например, «Моя статья 1» должна быть в 3 категориях, а «Моя статья 2» должна быть только в 2 и т.д.
По сути, это просто таблица, созданная для начала. Вот что у меня есть:
Table = articles
Fields = id, publicationDate, title, summary, content
Table = categories
Fields = id, categoryTitle
Я немного знаю об объединениях, связях и т. Д., Но я хочу разобраться в этом с самого начала.
Ответ №1:
Вам нужна таблица «многие ко многим», которая будет связывать идентификаторы статей с идентификаторами категорий
CREATE TABLE articles_categories (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
articles_id INT,
category_id INT
) TYPE=myisam;
Таким образом, для каждой категории, которую вы связываете со статьей, вам нужно будет вставить строку в эту таблицу.
Возможно, что-то вроде:
$currentArticle = array('id' => 99, 'name' => 'Test Article');
$currentCategory = array('id' => 1, 'name' => 'First Category');
mysql_query(sprintf('INSERT INTO articles_categories (articles_id, category_id) VALUES (%d, %d)', $currentArticle['id'], $currentCategory['id']));
Ответ №2:
Вам нужна третья таблица с именем article_to_categories или что-то еще, с двумя полями:
- article_id
- category_id
Добавьте запись для каждой статьи и ассоциации категорий. Установите PK для обоих столбцов.
Комментарии:
1. Я не знал, что у вас может быть два первичных ключа в одной таблице
2. Не два первичных ключа … один ключ, который использует оба столбца. Это называется составным ключом. В качестве альтернативы вы можете добавить еще один столбец, но это просто пустая трата места, поскольку в этой таблице не будет ничего, кроме этих ассоциаций.
3. Хорошо, я попробую это сейчас. В качестве примера, как я мог бы вернуть информацию в SQL-запросе, например. Моя статья 1 находится в категории 1, категории 2 и категории 3?
4.
SELECT categories.* FROM categories, articles_to_categories WHERE categories.id=articles_to_categories.category_id AND articles_to_categories.article_id=12345;