Вывод данных из бд с сортировкой

292
19 декабря 2016, 19:26

Есть таблица db_weapons.

Как составить подзапросы mysql для вывода из таблицы всех значений, но при этом сортируя их по категориям которые записаны в ячейке quality

Что бы выведенный вид был таков:

----------------------------
id: 3, quality: 'base_grade',
id: 5, quality: 'base_grade',
id: 4, quality: 'exotic',
id: 6, quality: 'exotic',
id: 2, quality: 'restricted',
id: 7, quality: 'restricted',
id: 1, quality: 'covert'
----------------------------

Это всё для того что бы не сортировать силами php Но есть кто-то знает решение на php которое займёт мало времени на обработку, то я буду рад принять помощь и рассмотреть пример.

Answer 1
SELECT * FROM db_weapons 
WHERE quality IN ('base_grade','exotic','restricted','covert') 
ORDER BY FIELD(quality, 'base_grade','exotic','restricted','covert')
Answer 2

Например ORDER BY + CASE

SELECT *
FROM db_weapons
ORDER BY 
  CASE quality
    WHEN quality = 'base_grade' THEN 1
    WHEN quality = 'exotic'     THEN 2
    WHEN quality = 'restricted' THEN 3
    WHEN quality = 'covert'     THEN 4
    ELSE 99 --неизвестные в конце
  END 
Answer 3

Вам надо создать справочник групп, примерно такой:

ord  quality
1    exotic
2    base_grade
3    restricted
4    covert

И запрос выборки из основной таблице сделать тогда таким:

select A.*
  from db_weapons A, qualityOrd B
 where B.quality=A.quality
 order by B.ord

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

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

Answer 4

Покапай в сторону GROUP BY, а потом уже будешь вытаскивать группы по очередности которые нужны.

READ ALSO
Ошибка при установке Bitrix на хосинг

Ошибка при установке Bitrix на хосинг

При установке Bitrix на хостинг появляется следующая ошибка: Для установки продукта в кодировке UTF-8 необходимо установить библиотеку mbstring c параметрами...

350
php поменять точку на запятую

php поменять точку на запятую

Обрабатываю числа функцией round:

236
Серверная отправка файла по cURL

Серверная отправка файла по cURL

На сервере есть 3 файла:

324