PgSql с PHP: проблемы, связанные с расположением - PullRequest
0 голосов
/ 23 марта 2012

Допустим, у меня есть такая таблица


      a    |     b     |     c     |     d     |     e     |  id |  user_id     |     
---------------------------------------------------------------------------------
  -2.3213  | 9999232342| 0.2099321 |  0.113399 |   -1221   |  1  |43124123321321|
---------------------------------------------------------------------------------
  -3.3213  | 2231232342| 0.3099321 |  0.203799 |   -1231   |  2  |34224123321321|
---------------------------------------------------------------------------------
  -4.3293  | 1111232342| 0.2099321 |  0.203799 |   -1241   |  3  |98787612321321|
---------------------------------------------------------------------------------
  -1.1133  | 2231232342| 0.1099321 |  0.213399 |   -1231   |  4  |76534123321321|
--------------------------------------------------------------------------------
  -4.2469  | 2231232342| 0.6099321 |  0.203399 |   -1261   |  5  |55542333321321|
---------------------------------------------------------------------------------
  -1.1133  | 2231232342| 0.1099321 |  0.103599 |   -1271   |  6  |12454123321321|
---------------------------------------------------------------------------------
  -3.3213  | 2231232342| 0.5099321 |  0.203599 |   -1281   |  7  |23123323321321|

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


---------------------------------------------------------------------------------
  -9.1133  | 2231232342| 0.1099321 |  0.103599 |   -1181   |  8  |23123323321321|

Итак ... могу ли я расположить строки с помощью php таким образом, чтобы они сначала располагались по столбцу 'a', затем по столбцу 'b', затем по столбцу 'c' и т. Д. В порядке убывания?


      a    |     b     |     c     |     d     |     e     |  id |  user_id     | 
---------------------------------------------------------------------------------
  -9.1133  | 2231232342| 0.1099321 |  0.103599 |   -1181   |  8  |23123323321321|
---------------------------------------------------------------------------------
  -4.3293  | 1111232342| 0.2099321 |  0.203799 |   -1241   |  3  |98787612321321|
--------------------------------------------------------------------------------
  -4.2469  | 2231232342| 0.6099321 |  0.203399 |   -1261   |  5  |55542333321321|
---------------------------------------------------------------------------------
  -3.3213  | 2231232342| 0.5099321 |  0.203599 |   -1281   |  7  |23123323321321|
---------------------------------------------------------------------------------
  -3.3213  | 2231232342| 0.3099321 |  0.203799 |   -1231   |  2  |34224123321321|    
---------------------------------------------------------------------------------
  -2.3213  | 9999232342| 0.2099321 |  0.113399 |   -1221   |  1  |43124123321321|
---------------------------------------------------------------------------------
  -1.1133  | 2231232342| 0.1099321 |  0.213399 |   -1231   |  4  |76534123321321|
---------------------------------------------------------------------------------
  -1.1133  | 2231232342| 0.1099321 |  0.103599 |   -1271   |  6  |12454123321321|

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

Я новичок в работе с базой данных и буду очень признателен, если кто-нибудь сможет мне помочь. Спасибо.

1 Ответ

0 голосов
/ 23 марта 2012

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

SELECT * FROM your_table
ORDER BY a ASC, b DESC, c DESC, d DESC, e ASC

Обратите внимание, что вы просили отсортировать a в порядке убывания, но ваш пример показывает нам обратное, потому что a кажется отрицательным ...

Если вам действительно нужен нисходящий порядок, даже если значение отрицательное, вы можете попробовать использовать функцию ABS.

SELECT * FROM your_table
ORDER BY ABS(a) DESC, b DESC, c DESC, d DESC, ABS(e) DESC
...