|
|
|
| Подскажите как вывести случайным образом, да еще и отсортировать?
Делаю так:
$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;");
|
не выводит :( | |
|
|
|
|
|
|
|
для: Елена Смирнова
(04.03.2009 в 16:59)
| | глупость какаято.... сами подумайте как так можно? как можно отсрортировать результат по цене и в тот же момент рандомно...??
уберите order by rand() | |
|
|
|
|
|
|
|
для: Елена Смирнова
(04.03.2009 в 16:59)
| | Я так понимаю, нужно получить 5 случайных записей из всего набора и их отсортировать в порядке возрастания значений поля "cena". Так? | |
|
|
|
|
|
|
|
для: Axxil
(04.03.2009 в 17:15)
| | Axxil Да, верно. | |
|
|
|
|
|
|
|
для: Елена Смирнова
(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
?>
|
| |
|
|
|
|
|
|
|
для: 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
Хотя это не тот метод, который я стал бы рекомендовать применять, даже если он работает... | |
|
|
|
|
|
|
|
для: Trianon
(04.03.2009 в 17:58)
| | > Так нельзя, поскольку элементы массива будут сравниваться не как числа, а как символьные строки.
О, сенкс, об этом как-то не подумал | |
|
|
|
|
|
|
|
для: Trianon
(04.03.2009 в 17:58)
| | А как можно? Как нужно? | |
|
|
|
|
|
|
|
для: 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;
}
|
| |
|
|
|
|
|
|
|
для: nikita2206
(04.03.2009 в 17:24)
| | nikita2206 по вашему коду белый лист | |
|
|
|
|
|
|
|
для: Елена Смирнова
(04.03.2009 в 17:28)
| | ну я ж не видил вашу базу, вы не должны ограничиваться сочетанием "копировать-вставить", просто поймите в чем идея и сделайте на свой лад.... | |
|
|
|
|
|
|
|
для: nikita2206
(04.03.2009 в 17:30)
| | Попробовал с вашим кодом, но применив RSORT, но как мне вывести не сами цены, а данные id и name | |
|
|
|
|
|
|
|
для: Елена Смирнова
(04.03.2009 в 17:35)
| | думаю будет лучше если сами поймете.... просто образуйте еще один(два) массив в цикле while где идет обработка mysql_fetch_array и после этого в foreach подставляйте значения массива.... | |
|
|
|
|
|
|
|
для: nikita2206
(04.03.2009 в 17:40)
| | А как перемешать массивы, чтобы ячейки совпали?
Не выходит ничего :((( | |
|
|
|
|
|
|
|
для: Елена Смирнова
(04.03.2009 в 18:12)
| | Может ктонить поможет кодом, у меня все дело из-за этой выборки стоит ((( | |
|
|
|
|
|
|
|
для: Елена Смирнова
(04.03.2009 в 18:26)
| | может стоит посмотреть чуть выше? | |
|
|
|
|
|
|
|
для: Axxil
(04.03.2009 в 19:31)
| | Там же написано, что так нельзя... а в теме SQL у меня не работает LIMIT во встроенном запросе | |
|
|
|