@dima12s

Как облегчить запрос sql?

Здравствуйте! Скажите пожалуйста, как можно облегчить запрос:

$result_actors = $db->query("SELECT * FROM `actors` WHERE `post_id` = '".$row['id']."' ORDER BY `num` ASC");
if ($db->num_rows($result_actors)) {
while ($row_actor = $db->get_row($result_actors)) {
$full_actor = $db->super_query("SELECT `id`, `date`, `title`, `category`, `alt_name`, `xfields` FROM `".PREFIX."_post` WHERE `title` = '".$db->safesql($row_actor['name'])."' LIMIT 1");

$tpl3->set('{name}', $row_actor['name']);
}
}

Начинает грузить сайт, если запросов на странице больше 50
  • Вопрос задан
  • 437 просмотров
Пригласить эксперта
Ответы на вопрос 3
rim89
@rim89
программист-велосипедист
  • Почитайте про php.net/manual/ru/pdo.prepared-statements.php
  • Не нужно делать запросы в циклах PHP
  • Не нужно выгружать *, если не все поля используются
  • Лучше SQL запросом собрать все что нужно и с ним уже работать.

Из этого куска не сильно понятно что надо получить то и что есть
Ответ написан
@ReFeRy
Так здесь же элементарный inner join двух таблиц. Или left join, если во второй таблице может быть несколько записей с одинаковыми title.
Ответ написан
@dima12s Автор вопроса
$result_actors = $db->query("SELECT `a`.`post_id`, `a`.`role`, `a`.`name`, `a`.`main_role`, `p`.`id`, `p`.`date`, `p`.`title`, `p`.`category`, `p`.`alt_name`, `p`.`xfields`
FROM `dle_post` AS `p`
INNER JOIN actors AS `a` ON (`a`.`post_id` = '".$row['id']."')
WHERE `a`.`post_id` = `p`.`id`
ORDER BY `num` ASC
");

if ($db->num_rows($result_actors)) {
$tpl3->load_template('actors.tpl');
while ($row_actor = $db->get_row($result_actors)) {
$tpl3->set('{vav1}', $row_actor['id']);
$tpl3->set('{name}', $row_actor['name']);
$tpl3->set('{role}', $row_actor['role']);

$tpl3->compile('actors');
}
$tpl3->clear();

$tpl->set('[actors]', '');
$tpl->set('[/actors]', '');
$tpl->set('{actors}', $tpl3->result['actors']);

} else {
$tpl->set_block('#\[actors\].*?\[\/actors\]#is', '');
}

Теперь вообще выводится как то странно.... Поле id получается дублируется везде, а поля актеры и роли как нужно выводятся. 74800cd5375141e7a653653e23a38bf7.jpg
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы