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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сортировка по кругу по id но с условием первой записи по другому столбцу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Рачей
Отправлено: 26 Марта, 2017 - 13:01:06
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Вот встала задача чуть посложнее.. Надо отсортировать по айди, но первым должно быть значение зависимое от другого поля. Можно ли реализовать?
Одним словом в таблице есть id и user_id
необходимо выбрать несколько полей с сортировкой по id (ORDER BY id) но первым в выдаче должен быть определенный user_id и от него сортировка по кругу.. по id?
 
 Top
Мелкий Супермодератор
Отправлено: 26 Марта, 2017 - 16:05:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




В прошлой теме что вы хотите получить я догадался исключительно по приведённому примеру желаемой сортировки.


-----
PostgreSQL DBA
 
 Top
Рачей
Отправлено: 26 Марта, 2017 - 21:19:27
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




А решения я так понимаю мне не найти?
 
 Top
Мелкий Супермодератор
Отправлено: 26 Марта, 2017 - 21:43:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Может и найти. Понять бы только, что надо получить. Пример данных этому зачастую очень помогает.


-----
PostgreSQL DBA
 
 Top
Рачей
Отправлено: 26 Марта, 2017 - 22:36:44
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




есть страница на которой 8 аватарок по кругу,

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

не знаю как еще объяснить
 
 Top
Мелкий Супермодератор
Отправлено: 27 Марта, 2017 - 10:28:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Рачей пишет:
не знаю как еще объяснить

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

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

?


-----
PostgreSQL DBA
 
 Top
Рачей
Отправлено: 28 Марта, 2017 - 16:43:39
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Спасибо, попробуюУлыбка
(Добавление)
Что я не так делаю?
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.  
 
 Top
Мелкий Супермодератор
Отправлено: 28 Марта, 2017 - 17:17:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Подставляете данные в запрос.
(Добавление)
Мало того, что подставляете данные в запрос, так ещё и очевидно числовые данные как строки.
Затем ни ddl, ни dml запросов, на даже просто объяснения наблюдаемого поведения. Короче - всё неправильно.


-----
PostgreSQL DBA
 
 Top
Рачей
Отправлено: 28 Марта, 2017 - 17:25:19
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




А как правильно сделать?


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.  
 
 Top
Рачей
Отправлено: 29 Марта, 2017 - 12:03:17
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




я так и не понимаю как правильно сделать.
 
 Top
zypikov
Отправлено: 29 Марта, 2017 - 14:02:22
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




А где вы результат присваиваете?
Рачей пишет:
$st->execute($dat);

После этого должно быть что-то вроде:


-----
У всего есть обратная сторона.
 
 Top
Рачей
Отправлено: 29 Марта, 2017 - 21:42:37
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Может не так объяснил?

Есть таблица

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
 
 Top
T1grOK
Отправлено: 29 Марта, 2017 - 22:02:19
Post Id



Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013  


Помог: 7 раз(а)




Так в предыдущей теме же дали правильный ответ, чего вам еще не хватает Не понял


-----
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
 
 Top
Рачей
Отправлено: 30 Марта, 2017 - 00:46:45
Post Id


Гость


Покинул форум
Сообщений всего: 94
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Если внимательно почитать то вы увидите что ответ не правильный.

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

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


После этого должно быть что-то вроде:
[/quote]

Ну естесстно...

(Отредактировано автором: 30 Марта, 2017 - 00:48:30)

 
 Top
T1grOK
Отправлено: 30 Марта, 2017 - 17:53:39
Post Id



Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013  


Помог: 7 раз(а)




Рачей пишет:
Если внимательно почитать то вы увидите что ответ не правильный.

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

(Отредактировано автором: 30 Марта, 2017 - 17:54:09)



-----
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB