За последние 24 часа нас посетили 22429 программистов и 1025 роботов. Сейчас ищут 683 программиста ...

Как сгруппировать колонки?

Тема в разделе "MySQL", создана пользователем EndoCrinolog, 14 май 2021.

Метки:
  1. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Доброго времени суток. Столкнулся с проблемой. Есть журнал приёма пациентов. Сейчас у него такой вид:
    [​IMG]

    Как видите, идет подразделение на тех, кого еще нужно принять (группа 1) и тех, кого уже приняли (группа 2).

    Как вы можете заметить, в первой группе сортировка идет по времени, а во второй группе - нет.

    Сейчас у меня такой запрос:
    PHP:
    1. SELECT * FROM таблица WHERE journal_patid IN (SELECT journal_patid FROM таблица WHERE journal_day='{$Today_Array['day_id']}' AND journal_doctor='{$CHOSEN_DOCTOR_ID}' ORDER BY journal_time ASC) ORDER BY journal_ds_text ASC
    Вопрос - как правильно написать запрос, чтобы вторая группа тоже была отсортирована по времени?
     
  2. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Так, я тут через LEFT JOIN объединил таблицу приёма с таблицей пациентов, получилось отсортировать по времени + по имени:
    PHP:
    1. SELECT * FROM журнал cj LEFT JOIN пациенты cp ON cj.journal_patid=cp.patid_id WHERE cj.journal_day='ид_дня' AND cj.journal_doctor='ид_доктора' ORDER BY cj.journal_time ASC, cp.patid_name
    upload_2021-5-14_20-45-26.png

    Но вот как теперь отсортировать так, чтобы непринятые были выше по приоритету?....
     
  3. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Код (Text):
    1.  
    2. ...
    3. ORDER BY `column_name`, `time` ASC
    http://www.mysql.ru/docs/man/Sorting_rows.html
     
    EndoCrinolog нравится это.
  4. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    НЕ работает

    PHP:
    1. SELECT * FROM Журнал cj INNER JOIN Пациенты cp ON cj.journal_patid=cp.patid_id WHERE cj.journal_day='ид_дня' AND cj.journal_doctor='ид_доктора' ORDER BY cj.journal_time, cp.patid_name ASC
    upload_2021-5-14_21-30-28.png
     
  5. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Сортируйте по колонке с метками "принят\не принят" и колонке "время приема"
     
    EndoCrinolog нравится это.
  6. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Хм.. Нет колонки "принят/не принят"... Есть только наличие текста в диагнозе... С этим никак не получится?
     
  7. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Получится.
    Пустые строки будут выведены первыми

    Код (Text):
    1.  
    2. SELECT IF( `FileAuthor` = '', 0, 1 ) AS `status` , `table` . *
    3. FROM `table`
    4. ORDER BY `status`, `time` ASC
     
    #7 Drunkenmunky, 14 май 2021
    Последнее редактирование: 14 май 2021
    EndoCrinolog нравится это.
  8. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Прошу прощения, никак не понимаю, как конструкцию IF можно встроить в inner join?

    PHP:
    1. SELECT
    2. IF( `cj.journal_ds_text` = '', 0, 1 ) AS `status`, cj . *
    3. FROM Журнал cj INNER JOIN Пациенты cp ON cj.journal_patid=cp.patid_id WHERE cj.journal_day='ид_дня' AND cj.journal_doctor='ид_доктора' ORDER BY cj.journal_time, cp.patid_name ASC
     
  9. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Уберите пока все обратные кавычки из запроса, потом добавите, по мере понимания зачем они нужны.
     
    #9 Drunkenmunky, 15 май 2021
    Последнее редактирование: 15 май 2021
    EndoCrinolog нравится это.
  10. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    PHP:
    1. SELECT IF( cj.journal_ds_text = '', 0, 1 ) AS status, cj . * FROM {$CAOP_JOURNAL} cj INNER JOIN {$CAOP_PATIENTS} cp ON cj.journal_patid=cp.patid_id WHERE cj.journal_day='{$Today_Array['day_id']}' AND cj.journal_doctor='{$CHOSEN_DOCTOR_ID}' ORDER BY status, cj.journal_time ASC
    ВЫ - ГЕНИЙ!
    upload_2021-5-15_12-21-17.png

    Полный запрос с дополнительной сортировкой по имени:
    PHP:
    1. SELECT IF( cj.journal_ds_text = '', 0, 1 ) AS status, cj . * FROM Журнал cj INNER JOIN Пациенты cp ON cj.journal_patid=cp.patid_id WHERE cj.journal_day='194' AND cj.journal_doctor='1' ORDER BY status, cj.journal_time, cp.patid_name ASC
    upload_2021-5-15_12-23-31.png

    СПАСИБО ВАМ ОГРОМНОЕ
     
  11. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    Помогите, пожалуйста, еще разок...

    Вот смотрите, есть таблица с пациентами, а есть таблица с визитами. Мне нужно посчитать, сколько было визитов у каждого пациента.
    Я понимаю, что случай банальный, и всё делается через COUNT, но я не могу понять, как правильно сформировать запрос?

    PHP:
    1. SELECT COUNT(cj.journal_id) as visits, cp . * FROM Пациенты as cp INNER JOIN Журнал cj ON cp.patid_id=cj.journal_patid
    Как правильно сделать?
     
  12. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Чтобы посчитать количество визитов, вам нужна только таблица с визитами.
    Подразумевается, что у пациента есть уникальный ID
    Код (Text):
    1. SELECT COUNT( `visit_ID` )
    2. FROM `visits`
    3. GROUP BY `patient_ID`
    Вместо `visit_ID` может быть любое поле, и *
     
    EndoCrinolog нравится это.
  13. EndoCrinolog

    EndoCrinolog Активный пользователь

    С нами с:
    4 фев 2012
    Сообщения:
    205
    Симпатии:
    1
    Адрес:
    Тольятти
    СПАСИБО БОЛЬШОЕ ЕЩЕ РАЗ!