2014-12-26 3 views
0
$sql = "SELECT `url`,`title`,`vid` FROM `video` ORDER BY `time` DESC limit 15"; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(); 
$row = $stmt->fetchAll(PDO::FETCH_ASSOC); 

Этот SQL может выбрать верхние новые 15-строчные данные.mysql random select Последние 15 из 100 строк данных

Я хочу, чтобы отобразить верхний новый 100, а просто показать 15

Как выбрать быстрее?

+1

Когда вы делаете LIMIT на 15, вы получаете только 15;), так что проблема? – Stony

+0

Мне нужно в последних 100, показать 15 случайных. как изменить sql? – Sky

+0

Если вы хотите, чтобы запрос работал быстрее, посмотрите на план объяснения и посмотрите, можете ли вы сделать его более эффективным с помощью правильных индексов или даже реструктуризации данных. – Fluffeh

ответ

1
$sql = "SELECT `url`,`title`,`vid` FROM `video` ORDER BY `time` DESC limit 100"; 

Я предполагаю, что $row[0] => дает первую запись.

-

function UniqueRandomNumbersWithinRange($min, $max, $quantity) { 
    $numbers = range($min, $max); 
    shuffle($numbers); 
    return array_slice($numbers, 0, $quantity); 
} 

-

foreach (UniqueRandomNumbersWithinRange(0,100,15) as $row_number) 
{ 
    $content=$row[$row_number]; 
    echo $content['title']; 
} 
+0

работал или нет? – EngineerCoder

+1

Это здорово. Спасибо большое! – Sky

+0

Добро пожаловать. – EngineerCoder

1

Ну вы могли бы попробовать фиксируя это нравится:

<?php 
//get the max count for the table; 
$max="SELECT id FROM video order by time desc LIMIT 1"; 
$start="SELECT id FROM video order by time desc LIMIT 100, 1"; 
$page_size=15; 
$rand_no=rand(start,$max - page_size); 

$result_set="SELECT * FROM video order by time LIMIT $rand_no,page_size"; 

NB: это абстрактный код объясняет логику.

+0

Большое спасибо за вашу демонстрацию. Ваша идея - хороший выбор – Sky

Смежные вопросы