Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

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

#php #mysql #sql #mysqli


Есть таблица 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 которое займёт мало времени на обработку, то
я буду рад принять помощь и рассмотреть пример.
    


Ответы

Ответ 1



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

Ответ 2



Вам надо создать справочник групп, примерно такой: 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 группы.

Ответ 3



Например 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

Ответ 4



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

Комментариев нет:

Отправить комментарий