Я использую фреймворк yii для создания веб-сайта, заботится о стихах, словах и прочем ...
проблема в том, что в базе данных содержится более 250 000 записей сообщений и более 500 000 записей ключевых слов.и отношения: S
что я пытаюсь сказать, что я хочу сделать оптимальный запрос, чтобы получить все связанные сообщения конкретного сообщения в зависимости от ключевых тегов ..
что я сделалпока что кэширует запрос, но он все еще медленный при первом его открытии, и это большая проблема!
вот мой код:
public function getRelatedMessages()
{
$id = $this->id;
$dependency = "select `messages`.id,count(id) as tag_count from messages left join `messages_tags` on `messages`.`id` = `messages_tags`.mid
where `messages_tags`.`tagid` in (select `tags`.`id` from tags left join `messages_tags` on tags.id = `messages_tags`.tagid
where `messages_tags`.`mid` = {$id}) and id <> {$id} group by id order by tag_count desc";
$dependency = Messages::model()->cache(900)->findAllBySql($dependency);
foreach ($dependency as $dependency) {
$dependency1[] = $dependency['id'];
}
$dependency = implode(", ", $dependency1);
$sql = "select * from messages where id in ({$dependency}) limit 4";
$relateds = Messages::model()->findAllBySql($sql);
$db = array();
foreach($relateds as $related) {
$db[] = $related;
}
if(!$relateds || count($db)<4) {
$limit = 4-count($db);
$sql = "select `messages`.id, `messages`.url_key, `messages`.photo_url, `messages`.message from messages order by rand(), likes desc, comments desc, impressions desc, reported asc limit {$limit};";
$relateds = Messages::model()->cache(900)->findAllBySql($sql);
foreach($relateds as $related) {
$db[] = $related;
}
}
return $db;
}
код выше выбирает только 4записи из связанных сообщений после их фильтрации, упорядочивания и прочее .. проблема в "упорядочить по", но мне это нужно: S
извините, если это было слишком долго ..
спасиботы:)