За последние 24 часа нас посетили 16402 программиста и 1678 роботов. Сейчас ищут 925 программистов ...

Выборка максимального значения из БД

Тема в разделе "PHP для новичков", создана пользователем Vihorek, 16 янв 2017.

  1. Vihorek

    Vihorek Новичок

    С нами с:
    16 янв 2017
    Сообщения:
    21
    Симпатии:
    2
    Здравствуйте!
    Моя проблема заключается в =>:
    В БД существует колонка ID. С помощью команды (SELECT MAX(id) AS id FROM 'тра-та-та') возможно узнать максимальный из существующих.
    Как я могу извлечь это значение из БД? Соединение с БД устанавливается с помощью PDO... Помогите пожалуйста
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а как обычно вы извлекаете из бд что-либо?
     
  3. Vihorek

    Vihorek Новичок

    С нами с:
    16 янв 2017
    Сообщения:
    21
    Симпатии:
    2
    Код (Text):
    1. try
    2. {
    3.   $sql = 'SELECT id, book_title FROM books';
    4.   $result = $pdo->query($sql);
    5. }
    6. catch (PDOException $e)
    7. {
    8.   $error = 'Ошибка при извлечении пар слов' . $e->getMessage();
    9.   include 'error.html.php';
    10.   exit();
    11. }
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Так. Вопрос. Вы вообще программируете? Или вы сейчас пытаетесь таким образом получить некий готовый код, который на авось впихнёте абы куда в свой проект?
     
  5. Vihorek

    Vihorek Новичок

    С нами с:
    16 янв 2017
    Сообщения:
    21
    Симпатии:
    2
    я читаю книгу (Кевин Янк - PHP и MySQL. От новичка к профессионалу). параллельно пытаюсь разобраться и немного усложняю.
    я так понимаю мне надо будет написать примерно так:
    $sql = 'SELECT MAX(id) AS id FROM 'тра-та-та'';
    $result = $pdo->query($sql);
    а дальше хз. в конце концов хотелось бы иметь переменную типа String
     
  6. Vihorek

    Vihorek Новичок

    С нами с:
    16 янв 2017
    Сообщения:
    21
    Симпатии:
    2
    я понимаю, что при извлечении большого количества значений используют массив, но тут одно лишь значение. по сути нужно обратиться к БД с нужным запросом, а дальше результат преобразовать к нужному виду.
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну у тебя будет массив с одной строкой и с одним полем внутри с ключем "id" и числом в нём =)
     
  8. Vihorek

    Vihorek Новичок

    С нами с:
    16 янв 2017
    Сообщения:
    21
    Симпатии:
    2
    ассоциативный массив походу, т.е. это самый простой вариант? встроенных функций никаких нет?
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не. нет отдельных функций для получения одного значения или одной строки.

    PHP:
    1. function getFirstRow(...
    2. ...
    3.     if ($result) {
    4.       $row = $result->fetch_assoc();
    5.       if ($row) {
    6.         return $row;
    7.       }
    8.     }
    9.     return false;
    10. }
     
  10. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    fetchColumn
    --- Добавлено ---
    Расшифрую пожалуй:
    PHP:
    1. <?php
    2. $query = "SELECT MAX(`id`) FROM `table_name`";
    3. echo $pdo->query($query)->fetchColumn(0);
    Алиас в данном случае для поля не нужен, номер колонки тоже, но я поставил "0", чтоб было чуть понятней по вашей задаче.
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты не проверяешь, пришел ли ответ =) а то там не всегда ответ бывает. Бывает иногда что и ничего путного там не бывает.
     
    SamyRed нравится это.
  12. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Я проверяю... у себя в коде. Но расписывать по всем канонам - сейчас уже нет ни сил, ни желания. Эту радость оставляю на усмотрение ТС ;)
     
  13. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ладушки
     
  14. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    SELECT id FROM table ORDER BY id DESC LIMIT 1
     
  15. Vihorek

    Vihorek Новичок

    С нами с:
    16 янв 2017
    Сообщения:
    21
    Симпатии:
    2
    Спасибо, это максимально похоже на то, что я и искал)
    Спасибо и Вам)

    И Вам, за уже третий способ определения макс id)
     
  16. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Если поле Id у тебя AUTO_INCREMENT то
    Код (Text):
    1. SELECT AUTO_INCREMENT -1 FROM information_schema.tables WHERE table_name = 'table_name'
     
  17. Vihorek

    Vihorek Новичок

    С нами с:
    16 янв 2017
    Сообщения:
    21
    Симпатии:
    2
    $last_id=$pdo->lastinsertid();


    вот,что я искал))
     
  18. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Ваше решение не оптимальное с точки зрения перфоманса. В случае если по целевому полю создан индекс, оно в лучшем случае не сильно проиграет min/max. В противном же случае - проиграет сильно.

    Важно понимать разницу что lastinsertid может быть ни разу != max(id) из вашей таблицы
     
  19. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Почему же, если id - авто инкремент, и записи не удаляются то очень даже...
     
  20. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну он не во всех случаях бывает. если праймари кей инкрементный то там не будет числа, как и в случае, если он текстовый и т.п.
     
  21. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну так учись нормально задавать вопрос :) Надо было написать: "Я вставил новую строку в таблицу, как мне узнать значение id (автоинкремент)", тебе бы сразу ответили. Эта функция работает только сразу после запроса insert, насколько я помню.
     
    Deonis и denis01 нравится это.