Mysql статьи по теме

0

Я пытаюсь сделать запрос возвратить 3 статьи, связанные с тем, который читает пользователь. Для этого я создал табличку с набором тегов, относящихся ко всем статьям (до 5 тегов).

  • Как мне построить мой запрос наиболее эффективным способом вернуть 3 связанные статьи?
  • Если нет связанных статей - как вернуть 3 случайных?

Вот что у меня есть:

CREATE TABLE IF NOT EXISTS `j_news` (
  `n_id` smallint(5) NOT NULL AUTO_INCREMENT,
  `n_title` varchar(94) COLLATE utf8_danish_ci NOT NULL,
  `n_text` text COLLATE utf8_danish_ci NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT=25 ;


CREATE TABLE IF NOT EXISTS `j_news_tags` (
  `nt_id` mediumint(7) NOT NULL AUTO_INCREMENT,
  `nt_news_id` mediumint(7) NOT NULL,
  `nt_tag` varchar(24) COLLATE utf8_danish_ci NOT NULL,
  PRIMARY KEY (`nt_id`),
  KEY `nt_news_id` (`nt_news_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci AUTO_INCREMENT=1 ;
Теги:

1 ответ

2
Лучший ответ

Если вы действительно рассматриваете производительность Я бы предложил вам прочитать этот вопрос. Я когда-то был. Он имеет дело с большими базами данных и имеет ориентиры по различным запросам (все относятся к тегам).

Чтобы сократить его, SQL будет выглядеть следующим образом:

SELECT DISTINCT p . * 
FROM projects p
JOIN projects_to_tags pt ON pt.project_id = p.num
JOIN projects_to_tags x ON x.tag_id = pt.tag_id
AND x.project_id = x -- x is your project ID number
  • 0
    Я пробовал следующий запрос: $ get_entries = mysql_query ("ВЫБЕРИТЕ ОТЛИЧИЕ n.n_id, n.n_title, n.n_text FROM j_news n JOIN j_news_tags nt ON nt.nt_news_id = n.n_id JOIN j_news_tags nt.nt_id AND x.nt_news_id = ". $ news_id." LIMIT 0,3 ") или умереть (mysql_error ()); Хотя он не работает должным образом, так как возвращает только ту статью, которую уже просматривает пользователь, я открыт для предложений! Спасибо :- )
  • 0
    @kris в связанном вопросе вы найдете код для воссоздания таблиц и условий моего примера запроса. Затем адаптировать его для работы на ваших столах должно быть довольно тривиально.
Показать ещё 1 комментарий

Ещё вопросы

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