|
|
|
| Нужно одним запросом вывести записи:
1) Вывести записи в порядке убывания, где есть rate_d>0
2) Вывести оставшиеся записи (кроме уже выведенных), в порядке убывания id (самые свежие вверху)
Если первый пункт не выполняется, просто выполнить 2-й | |
|
|
|
|
|
|
|
для: OLi
(26.04.2012 в 21:18)
| | попробуйте так:
select *, if(rate_d>0,1,0) as param from tb1 order by param desc,id desc
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(27.04.2012 в 11:31)
| | Еще одно усложнение, сначала вывести записи с vip=1, затем rate_d>0 потом новые добавленные и затем остальные | |
|
|
|
|
|
|
|
для: OLi
(27.04.2012 в 21:25)
| | Сделал так, но не могу понять почему не выводит сначала записи с vip=1
SELECT
SQL_CALC_FOUND_ROWS *
FROM
`listings`
WHERE
status=1
order by
case
when vip=1 then 1
when rate_d>0 then 2
when id then 3 else 4 end desc
limit 0, 5
|
| |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 01:02)
| | видимо не desc, а asc нужно использовать? и еще добавить id desc | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 09:55)
| | id desc вызывает ошибку | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 10:35)
| |
SELECT
SQL_CALC_FOUND_ROWS *
FROM
`listings`
WHERE
status=1
order by
case when vip=1 then 1
when rate_d>0 then 2
when id then 3 else 4 end asc, id desc
limit 0, 5
|
так не работает? | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 10:44)
| | Работает - спасибо
Только вот не отсортировывает по rate_d в порядке убывания:
"SELECT SQL_CALC_FOUND_ROWS
* FROM `listings` ".$where." order by case when vip=1 then 0 when rate_d>0 then 1 when id then 2 end
asc, id desc limit ".($page*$per_page).", ".$per_page.""
|
| |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 10:48)
| | when id then 3 наверное лишнее в запросе, если id это автоинкримент | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 10:48)
| | порядке убывания чего? по какому полю-значению? | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 10:54)
| | в порядке убывания значений поля rate_d т-е от 100 до 1 (Сверху-вниз) | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 10:59)
| | попробуйте таким образом:
"SELECT SQL_CALC_FOUND_ROWS
* FROM `listings` ".$where." order by case when vip=1 then 0 else 1 end
asc, rate_d desc, id desc limit ".($page*$per_page).", ".$per_page.""
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 11:05)
| | Работает, но после rate_d уже не выводит последние добавленные по id и при такой записи вышли записи с повтором для vip=1 | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 11:11)
| |
"SELECT SQL_CALC_FOUND_ROWS
* FROM `listings` ".$where." order by case when vip=1 then 0 when rate_d>0 then rate_d when id then 10000 end
asc, id desc limit ".($page*$per_page).", ".$per_page.""
|
попробуйте таким образом | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 12:01)
| | Отлично, только осталось rate_d вывести в обратном порядке | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 13:13)
| | тогда вот так:
"SELECT SQL_CALC_FOUND_ROWS
* FROM `listings` ".$where." order by case when vip=1 then 10000 when rate_d>0 then rate_d when id then 0 end
desc, id desc limit ".($page*$per_page).", ".$per_page.""
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 13:21)
| | Теперь новые где-то очень далеко)) | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 13:23)
| | новые после вип=1 и где рэйт_д>0 как Вы и говорили изначально или условия поменялись? | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 13:26)
| | Верно - сначала vip потом rate_d>0 затем последние обавленные | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 13:33)
| | ид - это же у вас идентификатор записи? возрастает при добавлении новых? | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 13:35)
| | да - возрастает | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 13:39)
| | новые сейчас у вас выводятся после условия рэйт_д>0 в порядке убывания | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 13:57)
| | у меня новые записи щас ушли в самый конец, а не в самый верх | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 14:05)
| | попробуйте when id>0 вместо when id | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 14:07)
| | Странно - но не сработало | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 14:12)
| | а если заменить when id на else 0? | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 14:21)
| | Тогда так: Warning: mysql_num_rows(): supplied argument is not a valid MySQL | |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 14:23)
| | then 0 последнее тоже убрать нужно | |
|
|
|
|
|
|
|
для: Lotanaen
(28.04.2012 в 14:27)
| | Ох, вот запрос, все тоже самое:
"SELECT SQL_CALC_FOUND_ROWS
* FROM `listings` ".$where." order by case when vip=1 then 10000 when rate_d>0 then rate_d else 0 end
desc, id desc limit ".($page*$per_page).", ".$per_page.""
|
| |
|
|
|
|
|
|
|
для: OLi
(28.04.2012 в 14:34)
| |
"SELECT SQL_CALC_FOUND_ROWS
*, if(vip=1,10000,if(rate_d>0,rate_d,0)) as param FROM `listings` ".$where." order by param
desc, id desc limit ".($page*$per_page).", ".$per_page.""
|
а так тоже не то что нужно получается? | |
|
|
|