ФорумПрограммированиеPHP для идиотов → Вопрос про date

Вопрос про date

  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 31 октября 2008 г. 15:33

    Здравствуйте.
    У меня в таблице 4 поля datetime
    У некоторых элементов заполнено 1 поле, у некоторых 2, 3 и тд.
    Мне нужно вывести все элементы в порядке заполнености и отсортированные по дате.

    Как мне это сделать с минимальным количеством запросов?Есть мысли?
    Или не мучаться и сделать 4мя?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 31 октября 2008 г. 15:36, спустя 3 минуты 19 секунд

    order by `date1` desc, `date2` desc, `date3` asc
    и т.д.
    тем самым ты установишь порядок сортировки.

    однако если тебе надо объединить из разных 4 полей (datetime), то объедини через union



    (select `date1` as `date` from …)
    union
    (select `date2` as `date` from …)
    union
    (select `date3` as `date` from …)
    order by `date`
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 31 октября 2008 г. 15:52, спустя 16 минут 27 секунд

    Чего то я не понимаю. =(
    Вот какой результат мне нужен

    2008-10-31 15:08:53
    2008-10-31 15:08:53
    2008-10-31 15:08:53

    2008-10-31 15:08:52 2008-10-31 00:00:00

    2008-10-31 15:08:51 2008-10-31 00:00:00 2008-10-31 00:00:00
    2008-10-31 15:08:51 2008-10-31 00:00:00 2008-10-31 00:00:00
    2008-10-31 15:08:51 2008-10-31 00:00:00 2008-10-31 00:00:00
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 31 октября 2008 г. 15:57, спустя 4 минуты 33 секунды

    Пока у меня 4 запро вида
    $q="SELECT * FROM `Zaiavka` WHERE `Time_proces`='0000-00-00 00:00:00' ORDER by `Time_new` desc";

    Тоесть, запрос для каждого поля, где следующее не назначенно.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 31 октября 2008 г. 16:36, спустя 38 минут 34 секунды

    Что-то типа

    SELECT
    IF(date1 IS NOT NULL AND date2 IS NULL, 0, 1) AS sort1,
    IF(date1 IS NOT NULL AND date2 IS NOT NULL, 0, 1) AS sort2
    ….
    ORDER BY sort1, sort2, date1, date2
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 4 ноября 2008 г. 22:56, спустя 4 дня 6 часов 20 минут

    Мне нужно что то типа этого
    	$q="SELECT `id` , `ORG` , `Apparat` , `Email` , `Telephone` , `Kontakt` , `Errors` , `Adres` , `Time_new` , `Time_old` , `Time_remont` , `Time_proces` , `Inzhener_id` FROM `Zaiavka` WHERE `Time_proces` IS NULL AND `Time_new` IS NOT NULL".
    " union ".
    "SELECT `id` , `ORG` , `Apparat` , `Email` , `Telephone` , `Kontakt` , `Errors` , `Adres` , `Time_new` , `Time_old` , `Time_remont` , `Time_proces` , `Inzhener_id` FROM `Zaiavka` WHERE `Time_remont` IS NULL  AND `Time_proces` IS NOT NULL".
    " union ".
    "SELECT `id` , `ORG` , `Apparat` , `Email` , `Telephone` , `Kontakt` , `Errors` , `Adres` , `Time_new` , `Time_old` , `Time_remont` , `Time_proces` , `Inzhener_id` FROM `Zaiavka` WHERE `Time_All` IS NULL  AND `Time_remont` IS NOT NULL".
    " union ".
    "SELECT `id` , `ORG` , `Apparat` , `Email` , `Telephone` , `Kontakt` , `Errors` , `Adres` , `Time_new` , `Time_old` , `Time_remont` , `Time_proces` , `Inzhener_id` FROM `Zaiavka` WHERE `Time_All` IS NULL  AND `Time_remont` IS NOT NULL".
    "";

    Тока че то не работает!
    Если условия убрать, то работает.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 5 ноября 2008 г. 11:03, спустя 12 часов 7 минут 14 секунд

    Professor, рекомендую установить MySQL Query Browser (Скачать) и проверить все запросы, после чего объединить их юнионом. Думаю только так ты сможешь получить больше опыта
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 5 ноября 2008 г. 12:02, спустя 59 минут 25 секунд

    каждый запрос в отдельности работает
    только не с такими строчками
    `Time_proces` IS NULL AND `Time_new` IS NOT NULL

    а с
    Time_proces`='0000-00-00 00:00:00' AND `Time_new`!='0000-00-00 00:00:00'

    Professor, рекомендую установить MySQL Query Browser (Скачать) и проверить все запросы

    Сейчас посмотрим.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 5 ноября 2008 г. 12:53, спустя 50 минут 31 секунду

    Я не пойму нахрена UNION если все извлекается из одной таблицы?
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 5 ноября 2008 г. 14:27, спустя 1 час 33 минуты 50 секунд

    Надо как то сгруппировать!
    В общам суть задачи:
    Менеджер создает заявки.
    В поле Time_new записывается время создания ее.
    Главный инженер назначает на заявку инженера, в поле Time_proces записывается время назначения инженера. и т.д.

    Все заявки надо вывести в таком порядке,
    Сначала новые отсортированные по Time_new, потом с назначенным инженером отсортированные по Time_proces и т.д.

    А так как заявок будет много, то нужен еще и LIMIT. Для этого надо все зделать в 1 запрос.

    Пока у меня для каждого вида заявки отдельный запрос.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 5 ноября 2008 г. 15:20, спустя 53 минуты 1 секунду

    По моему, я написал как примерно надо делать.
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 5 ноября 2008 г. 16:56, спустя 1 час 35 минут 52 секунды


    По моему, я написал как примерно надо делать.


    Да, но так не получается.
    $q="SELECT
    IF(Time_new IS NOT NULL AND Time_proces IS NULL, 0, 1) AS sort1
    FROM `Zaiavka`
    ORDER BY sort1";

    Выводит все заявки, а не должен=(
    И как к элементам таблици теперь обращаться?
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 5 ноября 2008 г. 17:21, спустя 25 минут 5 секунд

    SELECT
          IF(Time_new IS NOT NULL AND Time_proces IS NULL, 0, 1) AS sort1, *
          FROM `Zaiavka`
          ORDER BY sort1
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 5 ноября 2008 г. 17:27, спустя 6 минут 25 секунд


    Выводит все заявки, а не должен=(
    И как к элементам таблици теперь обращаться?
    1. С какого перепугу он должен не все выводить, если WHERE и LIMIT у тебя отсутствуют?
    2. Как обращаться Мавр написал.
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 5 ноября 2008 г. 19:50, спустя 2 часа 23 минуты 16 секунд

    Простите дурака!! =)
    Все получилось.
    СПАСИБО!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!