Попытка выбрать одну строку за раз из этого запроса (например, где rank = 1). Тем не менее, это не работает, потому что "неизвестный столбец" ранг ", если я меняю его на" WHERE id = 1 ", тогда он работает, но по какой-то причине он не знает, какой ранг даже он установлен
SET @rownum=0;
SELECT @rownum := @rownum + 1 AS rank, id, client, date, time, pickupCity, pickupState
FROM (
SELECT r.id, CONCAT(c.fname, ' ', c.lname) as client, r.date,
LOWER(TIME_FORMAT(r.time, '%l:%i%p')) as time, r.pickupCity, r.pickupState
FROM request r
INNER JOIN client c ON r.client = c.id
INNER JOIN pickup p ON r.id = p.request
INNER JOIN driver d ON d.id = p.driver
WHERE date = '2018-04-18' AND d.id = 1
GROUP BY time
) AS tab
HAVING rank = 1;
В MySQL вы можете сделать это, используя HAVING
:
SELECT @rownum := @rownum + 1 AS rank, id, client, date, time, pickupCity, pickupState
FROM (SELECT r.id, CONCAT(c.fname, ' ', c.lname) as client, r.date,
LOWER(TIME_FORMAT(r.time, '%l:%i%p')) as time, r.pickupCity,
r.pickupState
FROM request r JOIN
client c
ON r.client = c.id JOIN
driver d
ON ?
pickup p
ON d.id = p.driver
WHERE date = '2018-04-18' AND d.id = 1
GROUP BY time
) t CROSS JOIN
(SELECT @rank := 0) params
HAVING rank = 1;
Заметки:
??
для отсутствующих условий JOIN
.JOIN
. Вы должны изучить усилия по изучению правильного, явного, стандартного синтаксиса JOIN
.@rank
в запросе; вам не нужно отдельное выражение.GROUP BY
не имеет смысла, поскольку в SELECT
имеется много неагрегированных столбцов. Если бы мне пришлось размышлять, основной причиной ваших проблем является отсутствие условия JOIN
, и вы приложили много усилий для того, чтобы обойти это.
NULL
.
SELECT @rownum := @rownum + 1 AS rank
тогда вы делаете,where rank=1
.. это неправильно, удалите where, поскольку это не нужно