За последние 24 часа нас посетили 16862 программиста и 1702 робота. Сейчас ищут 938 программистов ...

Sql запрос

Тема в разделе "MySQL", создана пользователем IgorZ, 23 дек 2014.

  1. IgorZ

    IgorZ Новичок

    С нами с:
    23 дек 2014
    Сообщения:
    11
    Симпатии:
    0
    Здравствуйте,
    Вопрос в заголовке очень размытый, сейчас постараюсь описать более конкретно...
    Столкнулся с некоторым непониманием, как правильно сформировать 2 действия.
    Сначала делаю выборку из бд, допустим:

    Код (Text):
    1.  
    2. $sql = "SELECT * FROM persons";
    3. $qr_result = mysql_query($sql) or die(mysql_error());
    Запрос отрабатывает (тут никаких проблем). А дальше я хочу произвести 2 вещи.
    1 - Выбрать только первое из полей из persons и вывести его, к примеру в echo. Что-то вроде

    Код (Text):
    1.  
    2. $data = mysql_fetch_array($qr_result);
    3. echo '$data['name'] ';
    2 - Сразу же после этого пройтись опять по всему запросу. Т.е.

    Код (Text):
    1.  
    2. while ($data = mysql_fetch_array($qr_result)) {
    3.     echo '<tr>';
    4.     echo '<td>' . $data['id'] . '</td>';
    5.     echo '<td>' . $data['name'] . '</td>';
    6.     echo '</tr>';
    7.   }
    Но я сталкиваюсь с тем, что скорее всего я ошибочно это делаю дважды через mysql_fetch_array, т.к. в цикле у меня начинается выборка уже не с 0 элемента, а с 1ого. (т.е. наверное что-то вроде итератора, который уже сделал 1 раз next(); ).
    Как мне правильно обратится первый раз к полю запроса и выдрать оттуда инфу ? Не делать же 2 раза один и тот-же запрос в бд...
    Спасибо.
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в цикле проверить первая ли итерация. подходит? вообще задача-то какая реализуется?
     
  3. IgorZ

    IgorZ Новичок

    С нами с:
    23 дек 2014
    Сообщения:
    11
    Симпатии:
    0
    Из запроса формируется таблица. В заголовок идёт инфа из последнего поля (которое везде одинаковое), остальные 2 поля вписываются в саму таблицу.
    Т.е. например имеем Persons(Id, Name, Info) 3 шт. Info 1 раз посмотрели из самого первого persons и запихнули в шапку, а потом этих 3х persons вписали в таблицу (ввиде 2х колонок - id, name (без info)).

    И, скорее всего, моя ошибка что мне в первый раз надо выдирать элемент не через mysql_fetch_array() чтоб второй раз он шёл с 0 элемента. Или как я могу его контролировать ?
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Первое обращение выведи заголовок и сразу первую строчку таблицы, а в цикле уже остальное. Будет дублирование кода но ничего
     
  5. IgorZ

    IgorZ Новичок

    С нами с:
    23 дек 2014
    Сообщения:
    11
    Симпатии:
    0
    Мысль понял.
    А другие варианты (в принципе) существуют ?
    Возможно ли вообще 2 раза пройтись по резалту ? Пробую так

    Код (Text):
    1. while ($data = mysql_fetch_array($qr_result)) {
    2. //что-то внутри
    3. }
    4.  
    5. while ($data = mysql_fetch_array($qr_result)) {
    6. //что-то внутри
    7. }
    И второй уже не отрабатывает.
    Или без повторного mysql_query() тут никак ?
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Да можно, но думаю ошибка в логике это держать имена заголовков вместе с другими записями.

    Код (PHP):
    1. $data2 = array();
    2. while ($data = mysql_fetch_array($qr_result)) {
    3. $data2[] = $data;
    4. }
    5.  
    6. foreach ($data2 as $value) {
    7. //что-то внутри
    8. }
    Или одной строчкой, но читай документацию внимательно https://php.net/manual/ru/mysqli-result.fetch-all.php
     
  7. IgorZ

    IgorZ Новичок

    С нами с:
    23 дек 2014
    Сообщения:
    11
    Симпатии:
    0
    Понял, благодарю.