2013-12-13 2 views
0

Я ищу способ заказать мой запрос данных mysql в соответствии с тем, что я использую 2 даты (созданные и измененные). Очевидно, измененный установлен, когда на созданном.MySQL заказы с двумя датами

Я бы хотел, чтобы первый приоритет был изменен, если он существует или создан.

Очевидно, я хотел бы показать людям, которые посетили последний в дате независимо от того, пришел или вернулся.

QUERY:

SELECT userfrom, idrelation_user_visite_user FROM relation_user_visite_user WHERE userto = 1 AND SUBSTR(created,1,10) < '2013-12-13' ORDER BY created, modified DESC LIMIT 50 

(!!!) ВАЖНО: Просто понял, что я должен сделать вид массива (theorical) группировки создаются и изменяются, то порядок все DESc

SRC - SQL:

CREATE TABLE IF NOT EXISTS `relation_user_visite_user` (
    `idrelation_user_visite_user` int(11) NOT NULL AUTO_INCREMENT, 
    `created` datetime DEFAULT NULL, 
    `modified` datetime DEFAULT NULL, 
    `deleted` datetime DEFAULT NULL, 
    `userfrom` int(11) DEFAULT NULL, 
    `userto` int(11) DEFAULT NULL, 
    `active` int(1) DEFAULT '1', 
    PRIMARY KEY (`idrelation_user_visite_user`), 
    KEY `fk_relation_user_visite_user_users1` (`userfrom`), 
    KEY `fk_relation_user_visite_user_users2` (`userto`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1260 ; 



INSERT INTO `relation_user_visite_user` (`idrelation_user_visite_user`, `created`, `modified`, `deleted`, `userfrom`, `userto`, `active`) VALUES 
(61, '2013-12-13 15:26:08', NULL, NULL, 292, 1, 1), 
(64, '2013-10-21 22:48:04', '2013-11-24 21:10:24', NULL, 292, 1, 1), 
(93, '2013-10-23 13:24:30', '2013-11-09 16:06:47', NULL, 292, 1, 1), 
(132, '2013-10-24 20:07:39', NULL, NULL, 292, 1, 1), 
(202, '2013-10-27 21:40:29', '2013-11-15 00:58:37', NULL, 292, 1, 1), 
(311, '2013-11-03 18:28:49', NULL, NULL, 292, 1, 1), 
(379, '2013-11-06 13:40:50', NULL, NULL, 292, 1, 1), 
(407, '2013-11-06 18:27:50', '2013-11-06 18:48:18', NULL, 292, 1, 1), 
(521, '2013-11-09 16:06:36', '2013-12-10 19:16:21', NULL, 292, 1, 1), 
(563, '2013-11-11 22:51:46', NULL, NULL, 292, 1, 1), 
(722, '2013-11-18 05:08:09', '2013-11-18 05:21:37', NULL, 292, 1, 1), 
(765, '2013-11-18 20:11:17', NULL, NULL, 292, 1, 1), 
(859, '2013-11-23 01:04:11', '2013-12-10 18:48:50', NULL, 292, 1, 1), 
(935, '2013-11-27 16:15:36', '2013-12-02 11:48:24', NULL, 292, 1, 1), 
(982, '2013-12-01 18:00:48', NULL, NULL, 292, 1, 1), 
(992, '2013-12-02 14:21:46', '2013-12-05 12:25:08', NULL, 292, 1, 1), 
(1011, '2013-12-03 09:19:59', '2013-12-03 20:22:11', NULL, 292, 1, 1), 
(1019, '2013-12-03 11:09:08', NULL, NULL, 292, 1, 1), 
(1026, '2013-12-03 15:47:07', NULL, NULL, 292, 1, 1), 
(1053, '2013-12-03 22:36:42', '2013-12-03 22:45:56', NULL, 292, 1, 1), 
(1055, '2013-12-03 23:27:10', NULL, NULL, 292, 1, 1), 
(1066, '2013-12-04 10:53:18', NULL, NULL, 292, 1, 1), 
(1081, '2013-12-04 12:57:26', NULL, NULL, 292, 1, 1), 
(1122, '2013-12-04 23:39:14', NULL, NULL, 292, 1, 1), 
(1154, '2013-12-05 22:21:23', '2013-12-10 00:01:58', NULL, 292, 1, 1), 
(1185, '2013-12-06 22:12:15', NULL, NULL, 292, 1, 1), 
(1246, '2013-12-09 19:10:12', '2013-12-09 19:57:12', NULL, 292, 1, 1), 
(1259, '2013-12-10 18:55:07', NULL, NULL, 292, 1, 1); 
+0

Формат даты «Дата и время» – Titus

+0

Кажется, что способ сделать это будет: получает все созданные + модифицированы в каком массиве, а затем сортировать по приказывать все DESC – Titus

+3

Похоже, что большинство ответов сделали одно и то же неправильное предположение о вашей постановке проблемы - у вас была проблема с значением NULL. Можете ли вы предоставить образцы данных и что вы ожидаете от упорядоченного набора результатов? – AgRizzo

ответ

2

Я предполагаю, что когда создается запись их модифицирована столбец устанавливается в нуль, так что вы можете использовать CASE

SELECT userfrom, idrelation_user_visite_user 
FROM relation_user_visite_user, 
(CASE WHEN modified IS NOT NULL THEN modified 
ELSE created END) custom_order 
WHERE userto = 1 
AND SUBSTR(created,1,10) < '2013-12-13' 
ORDER BY 
CASE WHEN modified IS NOT NULL THEN modified 
ELSE created END) 
LIMIT 50 

ИЛИ вы можете сравнить столбцы

SELECT userfrom, idrelation_user_visite_user 
FROM relation_user_visite_user 
WHERE userto = 1 
AND SUBSTR(created,1,10) < '2013-12-13' 
ORDER BY 
(CASE WHEN modified > created THEN modified 
ELSE created END) DESC 
LIMIT 50 
+0

Логический не работает, работает над измененными в первую очередь, THEN, созданный ... мне нужно сочетание всех дат (созданных и измененных) THEN ORDER – Titus

+1

вот что делает случай, он отлично работает, он сначала создает агрегированный столбец, а затем сортирует его. – AdrianBR

4

Я предполагаю, что вы не можете использовать простой ORDER BY modified, потому что иногда доработанную является NULL. Если это так, используйте

ORDER BY COALESCE(modified, created) 

Функция COALESCE возвращает первое ненулевое значение.

+0

Не работает ... кажется, что он возвращает сначала не нулевое упорядоченное, чем созданное упорядоченное – Titus

+1

хорошее качество COALESCE – AdrianBR

+0

Идеальное решение! – Bora

2

использование случай:

SELECT userfrom, idrelation_user_visite_user , 
case when modified is not null then modified else created end as last_visit 
    FROM relation_user_visite_user 
    WHERE userto = 1 
    AND SUBSTR(created,1,10) < '2013-12-13' 
    ORDER BY 
    case 
    when modified is not null then modified 
    else created 
    end DESC 
limit 50 
+0

все было в порядке, но ему нужен и этот случай, примененный в select, чтобы видеть как виртуальный столбец и называть это массивом, шляпы на свой вопрос +1 :) –

+0

простой материал, если у меня вопрос правильный. Отредактированный ответ :) – AdrianBR

-2
SELECT IF(modified IS NOT NULL, modified, created) as orderdatas, 
created, modified, userfrom, idrelation_user_visite_user 
FROM relation_user_visite_user 
WHERE userto = 1 
AND SUBSTR(created,1,10) < '2013-12-13' 
ORDER BY orderdatas DESC LIMIT 50 
+0

Пока не хорошо, но кажется, что так лучше – Titus

+2

это мое первое решение говорит '(CASE WHEN modified NOT NOT NULL THEN modified ELSE created END)' разница вы использовали, если и я использовал случай, Оба будут давать тот же ответ –

+0

случай не делает массив?Я использую select, если для получения списка отверстий (созданного и измененного) порядка в отверстии – Titus

Смежные вопросы