Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сортировка по кругу по id но с условием первой записи по другому столбцу
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Сортировка по кругу по id но с условием первой записи по другому столбцу

Страниц (1): [1]
 

1. Рачей - 26 Марта, 2017 - 13:01:06 - перейти к сообщению
Вот встала задача чуть посложнее.. Надо отсортировать по айди, но первым должно быть значение зависимое от другого поля. Можно ли реализовать?
Одним словом в таблице есть id и user_id
необходимо выбрать несколько полей с сортировкой по id (ORDER BY id) но первым в выдаче должен быть определенный user_id и от него сортировка по кругу.. по id?
2. Мелкий - 26 Марта, 2017 - 16:05:44 - перейти к сообщению
В прошлой теме что вы хотите получить я догадался исключительно по приведённому примеру желаемой сортировки.
3. Рачей - 26 Марта, 2017 - 21:19:27 - перейти к сообщению
А решения я так понимаю мне не найти?
4. Мелкий - 26 Марта, 2017 - 21:43:44 - перейти к сообщению
Может и найти. Понять бы только, что надо получить. Пример данных этому зачастую очень помогает.
5. Рачей - 26 Марта, 2017 - 22:36:44 - перейти к сообщению
есть страница на которой 8 аватарок по кругу,

это 8 юзеров
когда я захожу на эту страницу, я должен себя увидеть на самом верху. Но все кто есть должны сортироваться по кругу. А другой зайдя на страницу должен увидеть себя на верху и остальных так же в том же порядке что и я по часовой..
то есть порядок всех должен быть одинаковым кто бы ни зашел.. но каждый должен видеть на верху себя и от него по часовой пошел сорт...

не знаю как еще объяснить
6. Мелкий - 27 Марта, 2017 - 10:28:20 - перейти к сообщению
Рачей пишет:
не знаю как еще объяснить

Могу в третий раз сказать - примером. Пример данных отлично помогает
Ну хоть вроде стало понятнее, что вы подразумеваете под кругом и что на эту фразу можно никакого внимания не обращать, это фронтенд, а не желание получить что-нибудь вроде round-robin сортировки по группе.

CODE (SQL):
скопировать код в буфер обмена
  1. ORDER BY user_id = :uid DESC, another_sort_field

?
7. Рачей - 28 Марта, 2017 - 16:43:39 - перейти к сообщению
Спасибо, попробуюУлыбка
(Добавление)
Что я не так делаю?
PHP:
скопировать код в буфер обмена
  1.  
  2.         $st = $db->query("
  3.                         SELECT t0.id, user_id, first_name, photo_200
  4.                         FROM table_avatar t0
  5.                         JOIN users t1 ON t1.id = t0.user_id
  6.                         WHERE table_id = '{$t_id}'
  7.                         ORDER BY t0.user_id = '{$user_id}' DESC, t0.id         
  8.         ");
  9.  
8. Мелкий - 28 Марта, 2017 - 17:17:06 - перейти к сообщению
Подставляете данные в запрос.
(Добавление)
Мало того, что подставляете данные в запрос, так ещё и очевидно числовые данные как строки.
Затем ни ddl, ни dml запросов, на даже просто объяснения наблюдаемого поведения. Короче - всё неправильно.
9. Рачей - 28 Марта, 2017 - 17:25:19 - перейти к сообщению
А как правильно сделать?


PHP:
скопировать код в буфер обмена
  1.  
  2. $dat = array(
  3.         'uid'   => $user_id,
  4.         'tid'   => $t_id,                      
  5. );
  6. $st = $db->prepare("
  7. SELECT t0.id, user_id, first_name, photo_200
  8. FROM table_avatar t0
  9. JOIN users t1 ON t1.id = t0.user_id
  10. WHERE table_id = :tid
  11. ORDER BY t0.user_id = :uid DESC, t0.id        
  12. ");  
  13. $st->execute($dat);
  14.  
10. Рачей - 29 Марта, 2017 - 12:03:17 - перейти к сообщению
я так и не понимаю как правильно сделать.
11. zypikov - 29 Марта, 2017 - 14:02:22 - перейти к сообщению
А где вы результат присваиваете?
Рачей пишет:
$st->execute($dat);

После этого должно быть что-то вроде:
12. Рачей - 29 Марта, 2017 - 21:42:37 - перейти к сообщению
Может не так объяснил?

Есть таблица

id my_id name

1 20 name1
2 45 name2
3 89 name3
4 34 name4
5 23 name5
6 98 name6
7 56 name7
8 49 name8
9 38 name9

необходимо отсортировать таблицу по id но что бы а выводе первым стоял my_id 89 id которого 3 а за ним по цепочке

3
4
5
6
7
8
9
1
2

и так же с любым другим. например my_id 56 id которого 7 и от него

7
8
9
1
2
3
4
5
6
13. T1grOK - 29 Марта, 2017 - 22:02:19 - перейти к сообщению
Так в предыдущей теме же дали правильный ответ, чего вам еще не хватает Не понял
14. Рачей - 30 Марта, 2017 - 00:46:45 - перейти к сообщению
Если внимательно почитать то вы увидите что ответ не правильный.

Правильное решение выглядит иначе:

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. ORDER BY IF(t0.id>=(SELECT t2.id FROM table_avatar t2 WHERE t2.user_id = :uid),0,1), t0.id


После этого должно быть что-то вроде:
PHP:
скопировать код в буфер обмена
  1. $res = $st->fetchAll();
[/quote]

Ну естесстно...
15. T1grOK - 30 Марта, 2017 - 17:53:39 - перейти к сообщению
Рачей пишет:
Если внимательно почитать то вы увидите что ответ не правильный.

Все там правильно(алгоритм правильный), просто думать совсем не хотите..

 

Powered by ExBB FM 1.0 RC1