Я хотел создать базу данных, в которой будут храниться теги, которые пользователи вводят для своих вопросов, и затем отображать их все для каждого отдельного вопроса; что-то вроде здесь на SO.
Вот таблица, которая делает все для меня сейчас:
CREATE TABLE questions_tags ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, url TEXT NOT NULL, tag VARCHAR(255) NOT NULL, count INT NOT NULL, PRIMARY KEY (id) );
Я знаю, что это неверно. Какие еще таблицы или таблицы мне нужны и что мне нужно изменить в этой таблице, если это необходимо?
Вы должны разделить свои данные между двумя таблицами, questions
и tags
и связать их с помощью таблицы questions_tags
join.
CREATE TABLE questions ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, url TEXT NOT NULL, PRIMARY KEY (id) ); CREATE TABLE tags ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, tag VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE questions_tags ( question_id INT UNSIGNED NOT NULL REFERENCES questions, tag_id INT UNSIGNED NOT NULL REFERENCES tags );
Я не уверен, что для столбца count
в вашей исходной таблице, поэтому я пропустил его.
Используя приведенные выше таблицы, вы можете использовать объединения для поиска всех вопросов с определенным тегом или всеми тегами вопроса.
редактировать
Чтобы получить счетчик для каждого тега, вы могли бы что-то вроде этого:
SELECT tag, count(*) AS c FROM tags GROUP BY tag;
редактировать
Чтобы получить количество всех тегов для всех вопросов, выполните следующие действия:
SELECT t.tag, q.question_id, count(*) AS c FROM tags AS t, questions_tags AS qt questions AS q WHERE t.id = qt.tag_id AND qt.question_id = q.id GROUP BY t.id, q.id;
Если вы хотите, чтобы только количество конкретных тегов или вопросов добавляло дополнительные WHERE
.
Примечание . Все SQL выше не проверены.
Таблицы:
CREATE TABLE questions_tags ( tag_id INT INT NOT NULL, question_id INT NOT NULL, ); CREATE TABLE tags ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, tag VARCHAR(255) NOT NULL, PRIMARY KEY (id) );
SQL
Выберите тег, связанный с вопросом
SELECT tag_id FROM question_tags WHERE question_id = $yourquestionid'
Выберите вопросы, связанные с тегом
SELECT question_id FROM question_tags WHERE tag_id = $yourtagid'
Укажите, сколько раз использовался тег
SELECT COUNT(tag_id) FROM question_tags where tag_id=$yourtagid
Сделать облако тегов
SELECT COUNT(tag_id) FROM question_tags GROUP BY tag;
Вам, вероятно, понадобится таблица отношений: m, которая хранит отношения к вашему «вопросу» -Таблицу.