Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: предыдущая и следущая строки
 
 автор: mastergrom   (05.06.2008 в 23:30)   письмо автору
 
 

есть таблица table:

id votes

оба столбца - int
первичный ключ - id
данные выводятся в таком порядке:

SELECT * FROM table ORDER BY votes DESC


У меня есть id текущей записи.
Как мне узнать id предыдущей строки и id следующей ? Если столбец votes может иметь одинаковые значения ?

   
 
 автор: Trianon   (05.06.2008 в 23:45)   письмо автору
 
   для: mastergrom   (05.06.2008 в 23:30)
 

Представьте себе, что у Вас в таблице ровно 10 строк, и в каждой строке votes = 0.

Вот Вам id = 50. Назовите, пожалуйста, id-ы предыдущей и следующей строк.

   
 
 автор: mastergrom   (05.06.2008 в 23:50)   письмо автору
 
   для: Trianon   (05.06.2008 в 23:45)
 

Но даже если 10 значений с votes=0

то при:
SELECT * FROM TABLE ORDER BY VOTES


Mysql отсортирует их в одном и том же порядке, если сделать 5 запросов, правильно ?

   
 
 автор: Trianon   (06.06.2008 в 00:46)   письмо автору
 
   для: mastergrom   (05.06.2008 в 23:50)
 

На практике, вероятно, да. (До первого какого-нибудь... восстановления из бэкапа.)
В теории - совершенно не обязан. А раз так - у Вас нет прав строить на этой базе смысл запроса.

Можно, правда, написать для определенности ORDER BY votes, id
Но Вы же не написали...

   
 
 автор: mastergrom   (06.06.2008 в 01:40)   письмо автору
 
   для: 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 в 11:48)   письмо автору
 
   для: mastergrom   (06.06.2008 в 01:40)
 

И еще хотел спросить:

мне нужно, что-бы сортировка шла по votes desc, а если писать ORDER BY votes, id desc то резульат совсем не тот ...
Впринципе, если ставить условие ORDER BY votes DESC - то MySQL сортирует в том же порядке. но, как сказал Trianon - в теории совсем не обязан
А как добиться что-б в теории был обязан?

   
 
 автор: Trianon   (06.06.2008 в 12:18)   письмо автору
 
   для: mastergrom   (06.06.2008 в 11:48)
 

ORDER BY votes DESC, id ASC

>А как добиться что-б в теории был обязан?
вероятно никак.
В теории БД от порядка строк в таблице (равно как и от порядка столбцов в ней) не должно зависеть ничего.

То, что задается конструкцией ORDER BY, не воздействует на саму таблицу.
Оно определяет лишь конечный порядок представления строк результата запроса.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования