|
|
|
| Есть таблица, в каждой строчке которой записаны показания датчиков. Строк много, десятки тысяч. В каждой строке есть ещё метка времени. Мне нужно выводить на экран не больше ста строк, какой бы интервал времени ни был задан. То есть, проще говоря, мне нужно из тысячи (пяти тысяч, семи с половиной тысяч...) строк выбрать 100 через равные интервалы. Самое простое, что приходит в голову, выбирать из базы все строки, а средствами PHP отсеивать лишнее. То есть примерно так:
<?
$point_count = 100;
$res = mysql_query("SELECT * FROM ...");
$i = 0;
$data_arr = array();
$delta = mysql_num_rows($res) / $points_count;
while ($res_arr = mysql_fetch_row($res))
{
if ($i % $delta == 0)
{
$data_arr[] = $res_arr[0]
}
}
?>
|
Такой способ будет работать, это решение «в лоб». Но нет ли более элегантного варианта? Например, прореживание средствами MySQL? | |
|
|
|
|
|
|
|
для: Киналь
(21.06.2012 в 00:20)
| | Можно так:
SELECT * FROM(
SELECT tbl.*, @x := @x +1 x FROM tbl
CROSS JOIN (SELECT @x := 0 t)T
)TT
WHERE x % 5=0
|
Вместо "5" - ваша $delta
__________
Ток сомневаюсь что будет быстрее. Но попытка не пытка =) | |
|
|
|
|
|
|
|
для: Sfinks
(21.06.2012 в 01:52)
| | Да, причём эту дельту ещё найти надо, то есть плюс один запрос. Непохоже на оптимизацию=) | |
|
|
|
|
|
|
|
для: Киналь
(21.06.2012 в 08:34)
| | А кто говорил что будет легко? =)
Да, маловато в MySQL средств, для подобных выходок. Ниче не поделаешь. | |
|
|
|