Условие и сортировка при group by

172
27 апреля 2019, 14:30

Есть таблица клиентов:

CREATE TABLE `clients` (
  `id` int(11) NOT NULL,
  `name` varchar(45) CHARACTER SET latin1 DEFAULT NULL,
  `company_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_clients_1_idx` (`company_id`),
  CONSTRAINT `fk_clients_1` FOREIGN KEY (`company_id`) REFERENCES `companys` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8

И таблица задач по клиентам (у одного клиента может быть >0 задач, или null):

CREATE TABLE `tasks` (
  `id` int(11) NOT NULL,
  `name` varchar(45) CHARACTER SET latin1 DEFAULT NULL,
  `deadline` datetime DEFAULT NULL,
  `dt` datetime DEFAULT CURRENT_TIMESTAMP,
  `client__id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Необходимо вывести клиентов отсортированных по полю deadline в tasks. С условием deadline >= NOW() (при этом так же их может быть >1, но должна показаться ближайшая).

Вот базовый запрос:

select * from clients
left join tasks ON tasks.client_id=clients.id
group by clients.id;
Answer 1

Как-то так (пример https://paiza.io/projects/hQF7wYJbIDZGgK9150as_A?language=mysql )

SELECT clients.*, tasks.*
FROM clients
JOIN (
    SELECT client__id, MIN(deadline) as deadline
    FROM tasks
    WHERE deadline >= NOW()
    GROUP BY client__id
) minTasks ON clients.id = minTasks.client__id
LEFT JOIN tasks ON tasks.client__id = clients.id AND minTasks.deadline = tasks.deadline
ORDER BY tasks.deadline ASC;
READ ALSO
Mysql - операции над полями View

Mysql - операции над полями View

Всем привет, недавно начал работу с вью и возник такой вопрос - можно ли производить какие-то операции над расчетными во вью колонками? Например...

205
div накладывается на другой

div накладывается на другой

Подскажите пожалуйста, есть 2 div:

238
Как отобразить текст который был создан WYSIWYG редактором?

Как отобразить текст который был создан WYSIWYG редактором?

Использую WYSIWYG редактор summernote, в админ панеле благодаря редактору создаю текст (описание продукта), этот текст хранится в базе данных

192