Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » MySQL » Как написать SQL запрос на рандомную простановку рейтинга у всех новостей?

Как написать SQL запрос на рандомную простановку рейтинга у всех новостей?


     25.03.2019    рейтинг    Все вопросы » MySQL    1383

вопрос
DLE 13.2, 25000 новостей, 5-звездочный рейтинг.

Нужно проставить рандомно для всех новостей рейтинг 3-5, а также кол-во проголосовавших 1-70.

Ответ уже поднимался, но он без кол-во проголосовавших и, возможно, уже устарел:

$arIds = $db->super_query('SELECT news_id FROM dle_post_extras', true);
foreach ($arIds as $id) {
    $rating = mt_rand(3,5);
    $vote = $rating*mt_rand(2,10);
    $db->query('UPDATE dle_post_extras SET rating = ' . $rating . ', vote_num = ' . $vote . ' WHERE news_id = ' . $id);
}


Также в dle_post_extras почему-то в строке rating не 1-5, а 1-100. Вообще непонятно почему так, ведь 5-звездочный рейтинг...

Ответа пока нет


10 комментариев

vitnet
PHP-developer

vitnet - 26 марта 2019 11:25 -

А так?
$arIds = $db->super_query( "SELECT news_id, rating FROM dle_post_extras", true);

foreach ($arIds as $row) {
	$vote = mt_rand(10, 70);
	$rating = $vote * mt_rand(2, 5);

	$db->query( "UPDATE dle_post_extras SET rating = " . $rating . ", vote_num = " . $vote . " WHERE news_id = " . $row['news_id'] );
}

LazyDev
PHP-developer

LazyDev - 26 марта 2019 12:24 -

Также в dle_post_extras почему-то в строке rating не 1-5, а 1-100. Вообще непонятно почему так, ведь 5-звездочный рейтинг.

Потому что там храниться общая оценка по всем голосам.
5 людей поставили оценку 5, в ячейке будет 25 а не 5.
$arIds = $db->super_query( "SELECT news_id, rating FROM dle_post_extras", true);

foreach ($arIds as $row) {
    $vote = mt_rand(1, 70);
    $rating = mt_rand(3, 5) * $vote;
    $db->query("UPDATE dle_post_extras SET rating='{$rating}', vote_num='{$vote}' WHERE news_id='{$row['news_id']}'");
}

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

ZeN41k
Юзер

ZeN41k - 26 марта 2019 15:36 -


А как выполнить этот запрос?

ZeN41k
Юзер

ZeN41k - 26 марта 2019 22:57 -

Большое спасибо за скрипт!

pavel31
Юзер

pavel31 - 26 марта 2019 17:19 -

Это php код, соответственно создайте php файл, скопируйте в него этот код и в адресной строке введите имя файла и выполните его. Только скорее всего в начало файла ппидётся подключить файлы: config.php, dbconfig.php и mysql.php. Что бы ошибок не было.

ZeN41k
Юзер

ZeN41k - 26 марта 2019 17:43 -

Создал файл .php с содержимым ниже, но при открытии HTTP ERROR 500

<?php

$arIds = $db->super_query( "SELECT news_id, rating FROM dle_post_extras", true);

foreach ($arIds as $row) {
    $vote = mt_rand(1, 70);
    $rating = mt_rand(3, 5) * $vote;
    $db->query("UPDATE dle_post_extras SET rating='{$rating}', vote_num='{$vote}' WHERE news_id='{$row['news_id']}'");
}

?>

ZeN41k
Юзер

ZeN41k - 26 марта 2019 18:06 -

Нашел php скрипт, которые удаляет инфу с доп.поля, возможно, с него можно взять нужную информацию и соединить со скриптом от LazyDev?

<?php
ini_set('memory_limit', '512M');
ini_set('display_errors', 1);
error_reporting(1);
ini_set('max_input_time', '200000');
define ( "DATALIFEENGINE", true );
set_time_limit(0);
header("Content-Type: text/html;charset=utf-8");

require_once $_SERVER['DOCUMENT_ROOT'] . '/engine/classes/mysql.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/engine/modules/functions.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/engine/data/dbconfig.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/engine/data/config.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/engine/api/api.class.php';

$sql = $db->query("SELECT id, xfields FROM ".PREFIX."_post WHERE id<20001");

while ( $row = $db->get_row ($sql) ) {
	$xfields_array = array();
	foreach ( explode('||',$row['xfields']) as $pac_xfields ) {
		$s_all = explode('|',$pac_xfields);
		$xfields_array[$s_all[0]] = $s_all[1];
	}

	unset($xfields_array['trailer']);

	$xfields = array();
	foreach ( $xfields_array as $key => $value ) { if ($value!=''){$xfields[] = $key.'|'.str_replace('|','|',$value);} }
	$xfields = addslashes(implode("||",$xfields));
	$db->query("UPDATE ".PREFIX."_post SET xfields='".$xfields."' WHERE id='".$row['id']."'");
}
?>

pavel31
Юзер

pavel31 - 26 марта 2019 21:42 -

Вот такой должен быть php скрипт


<?php
@ob_start();
@ob_implicit_flush(0);
@error_reporting (E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);
@ini_set('error_reporting', E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);
@ini_set('display_errors', true);
@ini_set('html_errors', false);
define('DATALIFEENGINE', true);
define('ROOT_DIR', dirname( __FILE__ ));
define('ENGINE_DIR', ROOT_DIR . '/engine');
require_once (ENGINE_DIR . '/classes/plugins.class.php');

$arIds = $db->super_query("SELECT news_id, rating FROM dle_post_extras", true);
foreach($arIds as $row) {
	$vote = mt_rand(1, 70);
	$rating = mt_rand(3, 5) * $vote;
	$db->query("UPDATE dle_post_extras SET rating='{$rating}', vote_num='{$vote}' WHERE news_id='{$row['news_id']}'");
}
?>

ZeN41k
Юзер

ZeN41k - 26 марта 2019 22:58 -

Огромное спасибо! Сработало =))

pavel31
Юзер

pavel31 - 27 марта 2019 21:01 -

Всегда рад помочь :) Удачи!

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх