За последние 24 часа нас посетили 16877 программистов и 1297 роботов. Сейчас ищут 1440 программистов ...

Поиск максимального из конкретных столбцов БД

Тема в разделе "PHP для новичков", создана пользователем haotichni, 9 апр 2013.

  1. haotichni

    haotichni Активный пользователь

    С нами с:
    14 фев 2011
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    дома недалеких
    Каким образом нужно построить функцию MAX, чтобы искать максимальное значение из определенных столбцов в бд?

    Допустим в базе есть следующие столбцы: id, data, srok1, srok2

    Код (Text):
    1. select MAX (srok1) FROM DB WHERE data='03.01.2013' AND id='1'
    эта штука безусловно работает!

    Код (Text):
    1. select MAX (srok1, srok2) FROM DB WHERE data='03.01.2013' AND id='1'
    а эта нет!!!

    как правильно построить запрос?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    greatest по полям агрегируем и потом по нему ищем max
     
  3. haotichni

    haotichni Активный пользователь

    С нами с:
    14 фев 2011
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    дома недалеких
    а можно по по подробнее?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    можно.
    Код (Text):
    1. SELECT MAX(GREATEST(`field1`, `field2`)) `grtstmx` FROM `table`
    сначала мы для каждой пары полей агрегируем поле с максимальным значением пары. мускул налету назначит неудобное имя этому агрегированнуму полю - GREATEST(`field1`, `field2`). но мы тут же ищем максимальное значение по этому, агрегированному для всех записей, полю. мускул назначит результирующему агрегированному полю имя MAX(GREATEST(`field1`, `field2`)), но мы тут же попросим присвоить этому полю имя-псевдоним grtstmx и все станет красиво. запрос вернет одну строку содержащую самое большое значение по двум полям таблицы. что и требовалось найти.
     
  5. haotichni

    haotichni Активный пользователь

    С нами с:
    14 фев 2011
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    дома недалеких
    а что, если одно из полей null??
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а где об этом было сказано ранее?
     
  7. haotichni

    haotichni Активный пользователь

    С нами с:
    14 фев 2011
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    дома недалеких
    нигде! сейчас интересуюсь!

    с этим можно как-то быть?
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    можно, проверяйте наличие нулевого типа данных и подставляйте нулевое числовое значение.

    Добавлено спустя 2 минуты 5 секунд:
    это если у вас есть случаи когда оба значения с нулевым типом. если нет (одно из значений всегда ненулевое) тогда можно использовать COALESCE()
     
  9. haotichni

    haotichni Активный пользователь

    С нами с:
    14 фев 2011
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    дома недалеких
    к примеру запрос выглядит так:

    Код (Text):
    1. SELECT MAX(GREATEST(`field1`, `field2`, `field3`, `field4`, `field5`)) `grtstmx` FROM `table`
    как правильно использовать COALESCE() ??
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а в мануал глянуть религия не позволяет? есть инструмент который выполняет какую-то функцию. цепочка инструментов выполняет задачу. сформулируйте алгоритм и переложите его а инструменты. если не получилось - публикуйте тут код который не работает и своими словами логику его работы. посмотрим, поможем. а сейчас вы просто требуете за вас решить вашу задачу.