NauGaika
@NauGaika
At heart I'm a programmer .

Можно ли объеденить эти два sql запроса в один?

Можно ли объеденить эти два запроса в один. Суть в выборе рандомной записи у которой correct<2. Заранее благодарю. Возможно есть другое решение. ORDER BY RANDOM() , как мне показалось, работает плохо.
$sql = "CREATE TEMP TABLE result(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,realId,rus,eng);INSERT INTO result(realId,rus,eng) SELECT id,rus,eng FROM words WHERE correct<2;";
	$db->exec($sql);
	$sql = "SELECT realId as id,rus,eng FROM result WHERE id = (ROUND(ABS(((SELECT COUNT(*) FROM result)-1)*RANDOM()/9223372036854775807))+1);";
	$result = $db->query($sql);
	$arr = $result->fetch(PDO::FETCH_ASSOC);
  • Вопрос задан
  • 349 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Я бы сделал теоретически как-то так:
1.Получаем рандомное число (rnd) от 1 до count(*)
2.Выбираем из таблицы top rnd записей с обратной сортировкой по ID и берем из выборки первую запись, можно и прямую сортировку, но тогда берем последнюю запись:
select top @rnd * from result order by ID desc

С sqlite дела не имел, потому и "теоретически".
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NauGaika
@NauGaika Автор вопроса
At heart I'm a programmer .
$sql = "SELECT id,rus,eng FROM words WHERE (correct<2 AND id < (ABS(ROUND(((SELECT COUNT(*) FROM words WHERE correct < 2)-1)*RANDOM()+1)/9223372036854775807))) ORDER BY id DESC LIMIT 1;";
	$result = $db->query($sql);
	$arr = $result->fetch(PDO::FETCH_ASSOC);

Как-то так получилось. Но вроде работает.
Ответ написан
Ваш ответ на вопрос

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

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