Как разумнее составить запрос Select с циклом Update?

Друзья, есть 4 рейтинга на сайте, которые формируются следующим образом:
Есть таблица товаров...
3 раза в сутки по крону запускается скрипт:
$k = 1;
$m1 = $db->query("SELECT id FROM dle_products WHERE tt != '0' ORDER BY tt DESC, kk DESC");
while ($row = $db->get_row($m1)) {
    $mm1 = $db->query("UPDATE dle_products SET top='" . $k++ . "' WHERE id='" . $row['id'] . "'");
}


Таких циклов целых 4 в одном скрипте, который запускается, повторюсь, 3 раза за сутки..
Т.е. суть скрипта: товары сортируются по рейтингу, через $kk++ присваивается место.. Это место записывается в таблицу с товаром, чтобы вывести на странице товара его место..

Буду очень благодарен, если кто-то подскажет, как это можно поразумнее реализовать..
  • Вопрос задан
  • 561 просмотр
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Специфично для mysql:
SET @a:=0;
UPDATE dle_products SET top=@a:=@a+1  WHERE tt != '0' ORDER BY tt DESC, kk DESC;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Можно обновлять столбец одним запросом.
Кусок кода из моего rss ридера
$sql_insert = "INSERT IGNORE INTO `news` (feed_id,title,link,description,pubDate,hash) VALUES";
		$sql_insert_array = [];
		$need_insert = false;

		foreach ($parser as $v) {
...
			$sql_insert .="(?,?,?,?,?,?),";
			array_push($sql_insert_array,$feed_id,$title,$v['link'],$desc,$v['update'], md5($desc.$title));
			$need_insert = true;
		}

		if($need_insert){
			$sql_insert = rtrim($sql_insert,",");
			$sql_insert .= " ON DUPLICATE KEY UPDATE `feed_id`=VALUES(`feed_id`), `title`=VALUES(`title`), `link`=VALUES(`link`), `description`=VALUES(`description`), `pubDate`=VALUES(`pubDate`), `hash`=VALUES(`hash`)";
			$this->db->prepare($sql_insert)->execute($sql_insert_array);
		}

По полю hash построен уникальный индекс.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы