|
|
|
| есть таблица table:
id votes
оба столбца - int
первичный ключ - id
данные выводятся в таком порядке:
SELECT * FROM table ORDER BY votes DESC
|
У меня есть id текущей записи.
Как мне узнать id предыдущей строки и id следующей ? Если столбец votes может иметь одинаковые значения ? | |
|
|
|
|
|
|
|
для: mastergrom
(05.06.2008 в 23:30)
| | Представьте себе, что у Вас в таблице ровно 10 строк, и в каждой строке votes = 0.
Вот Вам id = 50. Назовите, пожалуйста, id-ы предыдущей и следующей строк. | |
|
|
|
|
|
|
|
для: Trianon
(05.06.2008 в 23:45)
| | Но даже если 10 значений с votes=0
то при:
SELECT * FROM TABLE ORDER BY VOTES
|
Mysql отсортирует их в одном и том же порядке, если сделать 5 запросов, правильно ? | |
|
|
|
|
|
|
|
для: mastergrom
(05.06.2008 в 23:50)
| | На практике, вероятно, да. (До первого какого-нибудь... восстановления из бэкапа.)
В теории - совершенно не обязан. А раз так - у Вас нет прав строить на этой базе смысл запроса.
Можно, правда, написать для определенности ORDER BY votes, id
Но Вы же не написали... | |
|
|
|
|
|
|
|
для: Trianon
(06.06.2008 в 00:46)
| | Вобщем, как я понял средствами mysql - никак. попробовал с помощью php:
<?php
$result=mysql_query("SELECT id FROM table ORDER by votes,id DESC");
$num_rows=mysql_num_rows($result);
for ($i=0;$i<$num_rows;$i++) {
$row=mysql_fetch_array($result);
if ($i==$num_rows-1) $data.=$row['id'];
else $data.=$row['id'].",";
}
function show_pn($data,$id) {
$numbers=explode(",",$data);
foreach ($numbers as $key=>$value) {
if ($value==$id) $position=$key;
}
if ($position!=0) {
$previuos_position=$position-1;
$previous=mysql_query("SELECT id FROM table ORDER by votes,id DESC limit $previuos_position,1");
$row=mysql_fetch_array($previous);
echo "ID предыдущей строки: ".$row['id']."<br>";
}
else echo "предыдущей строки нет<br>";
if ($position!=count($numbers)-1) {
$next_position=$position+1;
$next=mysql_query("SELECT id FROM table ORDER by votes,id DESC limit $next_position,1");
$row=mysql_fetch_array($next);
echo "ID следующей строки: ".$row['id']."<br>";
}
else echo "следующей строки нет";
}
?>
|
| |
|
|
|
|
|
|
|
для: mastergrom
(06.06.2008 в 01:40)
| | И еще хотел спросить:
мне нужно, что-бы сортировка шла по votes desc, а если писать ORDER BY votes, id desc то резульат совсем не тот ...
Впринципе, если ставить условие ORDER BY votes DESC - то MySQL сортирует в том же порядке. но, как сказал Trianon - в теории совсем не обязан
А как добиться что-б в теории был обязан? | |
|
|
|
|
|
|
|
для: mastergrom
(06.06.2008 в 11:48)
| | ORDER BY votes DESC, id ASC
>А как добиться что-б в теории был обязан?
вероятно никак.
В теории БД от порядка строк в таблице (равно как и от порядка столбцов в ней) не должно зависеть ничего.
То, что задается конструкцией ORDER BY, не воздействует на саму таблицу.
Оно определяет лишь конечный порядок представления строк результата запроса. | |
|
|
|