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

Форум MySQL

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

 

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

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

тема: Случайный вывод с сортировкой
 
 автор: Елена Смирнова   (04.03.2009 в 16:59)   письмо автору
 
 

Подскажите как вывести случайным образом, да еще и отсортировать?
Делаю так:

$query = mysql_query("select id, name, cena, balans from `adv` where `balans` > '0,04' and `ok`='1' order by rand() and order by `cena`  desc LIMIT 5;");

не выводит :(

  Ответить  
 
 автор: nikita2206   (04.03.2009 в 17:13)   письмо автору
 
   для: Елена Смирнова   (04.03.2009 в 16:59)
 

глупость какаято.... сами подумайте как так можно? как можно отсрортировать результат по цене и в тот же момент рандомно...??
уберите order by rand()

  Ответить  
 
 автор: Axxil   (04.03.2009 в 17:15)   письмо автору
 
   для: Елена Смирнова   (04.03.2009 в 16:59)
 

Я так понимаю, нужно получить 5 случайных записей из всего набора и их отсортировать в порядке возрастания значений поля "cena". Так?

  Ответить  
 
 автор: Елена Смирнова   (04.03.2009 в 17:24)   письмо автору
 
   для: Axxil   (04.03.2009 в 17:15)
 

Axxil Да, верно.

  Ответить  
 
 автор: Axxil   (04.03.2009 в 17:40)   письмо автору
 
   для: Елена Смирнова   (04.03.2009 в 17:24)
 

<?
$query 
mysql_query("select id, name, cena, balans from `adv` where `balans` > '0,04' and `ok`='1' order by rand() desc LIMIT 5;");
$array = array();
while(
$row mysql_fetch_array($query)){
  
$array[] = $row;

usort($array,create_function('$a,$b','return ($a[cena] < $b[cena]) ? -1 : 1;'));
// массив array отсортирован по значению поля cena
?>

  Ответить  
 
 автор: Trianon   (04.03.2009 в 17:58)   письмо автору
 
   для: Axxil   (04.03.2009 в 17:40)
 

>
  return ($a[cena] < $b[cena]) ? -1 : 1;

Так нельзя, поскольку элементы массива будут сравниваться не как числа, а как символьные строки.

Обычно пишут проще: return $a[cena] - $b[cena];


И как оказалось, в некоторых случаях результат достижим средствами MySQL.
См. http://softtime.ru/forum/read.php?id_forum=3&id_theme=63155
Хотя это не тот метод, который я стал бы рекомендовать применять, даже если он работает...

  Ответить  
 
 автор: Axxil   (04.03.2009 в 18:05)   письмо автору
 
   для: Trianon   (04.03.2009 в 17:58)
 

> Так нельзя, поскольку элементы массива будут сравниваться не как числа, а как символьные строки.

О, сенкс, об этом как-то не подумал

  Ответить  
 
 автор: Елена Смирнова   (04.03.2009 в 20:10)   письмо автору
 
   для: Trianon   (04.03.2009 в 17:58)
 

А как можно? Как нужно?

  Ответить  
 
 автор: nikita2206   (04.03.2009 в 17:24)   письмо автору
 
   для: Axxil   (04.03.2009 в 17:15)
 

о_О сразу не дошло...

2Елена
тогда както так будет:
<?
$query 
mysql_query("select id, name, cena, balans from `adv` where `balans` > '0,04' and `ok`='1' order by rand() desc LIMIT 5;");
$temp '';
while(
$row mysql_fetch_array($query)){
  
$temp[] = $row['cena];
}
sort($temp);
reset($temp);
foreach($temp as $value){
  echo $value;
}

  Ответить  
 
 автор: Елена Смирнова   (04.03.2009 в 17:28)   письмо автору
 
   для: nikita2206   (04.03.2009 в 17:24)
 

nikita2206 по вашему коду белый лист

  Ответить  
 
 автор: nikita2206   (04.03.2009 в 17:30)   письмо автору
 
   для: Елена Смирнова   (04.03.2009 в 17:28)
 

ну я ж не видил вашу базу, вы не должны ограничиваться сочетанием "копировать-вставить", просто поймите в чем идея и сделайте на свой лад....

  Ответить  
 
 автор: Елена Смирнова   (04.03.2009 в 17:35)   письмо автору
 
   для: nikita2206   (04.03.2009 в 17:30)
 

Попробовал с вашим кодом, но применив RSORT, но как мне вывести не сами цены, а данные id и name

  Ответить  
 
 автор: nikita2206   (04.03.2009 в 17:40)   письмо автору
 
   для: Елена Смирнова   (04.03.2009 в 17:35)
 

думаю будет лучше если сами поймете.... просто образуйте еще один(два) массив в цикле while где идет обработка mysql_fetch_array и после этого в foreach подставляйте значения массива....

  Ответить  
 
 автор: Елена Смирнова   (04.03.2009 в 18:12)   письмо автору
 
   для: nikita2206   (04.03.2009 в 17:40)
 

А как перемешать массивы, чтобы ячейки совпали?
Не выходит ничего :(((

  Ответить  
 
 автор: Елена Смирнова   (04.03.2009 в 18:26)   письмо автору
 
   для: Елена Смирнова   (04.03.2009 в 18:12)
 

Может ктонить поможет кодом, у меня все дело из-за этой выборки стоит (((

  Ответить  
 
 автор: Axxil   (04.03.2009 в 19:31)   письмо автору
 
   для: Елена Смирнова   (04.03.2009 в 18:26)
 

может стоит посмотреть чуть выше?

  Ответить  
 
 автор: Елена Смирнова   (04.03.2009 в 19:58)   письмо автору
 
   для: Axxil   (04.03.2009 в 19:31)
 

Там же написано, что так нельзя... а в теме SQL у меня не работает LIMIT во встроенном запросе

  Ответить  
Rambler's Top100
вверх

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