Здравствуйте у меня есть таблица с:GROUP BY не работает хорошо
id_order | id_order_history | date_add
С помощью этого запроса я могу получить все заказы, которые имеют id_order_history = 3
(в стадии подготовки)
SELECT
`oh`.`id_order`
FROM (
SELECT MAX(`date_add`) AS date_add
FROM `'._DB_PREFIX_.'order_history`
GROUP BY `id_order`
) AS h
INNER JOIN
'._DB_PREFIX_.'order_history AS oh
ON
`h`.`date_add` = `oh`.`date_add`
INNER JOIN
'._DB_PREFIX_.'orders AS o
ON
`oh`.`id_order` = `o`.`id_order`';
$sql .= 'WHERE
oh.`id_order_state` = '.$status.'';
$sql .= ' AND
oh.date_add >= "'.$start.'"';
$sql .= ' AND
oh.date_add <= "'.$end.'"
ORDER BY
`oh`.`id_order` ASC
Проблема заключается в том, что для некоторых заказать SELECT MAX
не получить правильное значение date_add
id_order | id_order_history | date_add
1 | 5 | 25-09-2014 18:07:59 ---> this is the correct value
1 | 4 | 25-09-2014 18:07:51
1 | 3 | 25-09-2014 18:06:42 ---> but query return this
Если бы я добавьте на дату 1 секунда (18:06:43) запрос вернет правильное значение 25-09-2014 18:07:59
Я просто не могу понять, как решить проблему.
Я читал вокруг, что иногда GROUP BY
принимает результаты сумбурный ...
, как я могу это исправить?
создание SQL скрипку было бы здорово ... –
Что вы намерены для «внешнего ключа»? Можете ли вы привести мне пример? – user1499315
Если вам нравится, рассмотрите следующий простой двухэтапный курс действий: 1. Если вы еще этого не сделали, предоставьте надлежащие DDL (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый набор результатов, соответствующий информации, представленной на шаге 1. Наконец, нам было бы намного легче следовать, если вы полностью удалили PHP. – Strawberry