Выборка из БД, не могу понять

Тема в разделе "PHP", создана пользователем n1k.Sly, 18 апр 2018.

Статус темы:
Закрыта.
Модераторы: latteo
  1. n1k.Sly

    n1k.Sly Постоялец

    Регистр.:
    7 сен 2009
    Сообщения:
    92
    Симпатии:
    7
    Добрый день,
    Начал учить PHP и столкнулся с такой проблемой, не могу вывести данные из такой таблицы:

    id | contact_id | name | value

    123 | 3232 | phone | +7999999
    124 | 3232 | email | mail@example.com
    125 | 3232 | adress | улица 85
    126 | 3232 | inn | 555555555

    127 | 3233 | phone | +89654
    128 | 3233 | email | w@w.ru
    129 | 3233 | adress | сорокина 87
    130 | 3233 | inn | 6666666

    Совсем не могу понять как вывести данные из таблицы такой структуры (я даже не смог в гугле ничего найти, может плохо искал)

    Даже не могу предположить в какую сторону копать, подскажите пожалуйста.
     
  2. fortuner

    fortuner Нарушитель

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    902
    PHP:
    SELECT
    name
    /* это имя колонки */
    value
    FROM имя_таблицы
    WHERE id
    =123
    Примерно так.
    Вернет массив:
    PHP:
    Array(
      [
    0] => 'phone'
      
    [1] => '+799999'
    )
     
  3. n1k.Sly

    n1k.Sly Постоялец

    Регистр.:
    7 сен 2009
    Сообщения:
    92
    Симпатии:
    7
    ой, забыл написать, нужно получить данные при условии что нужно выбрать по contact_id т.е. собрать в массив например все поля для контакта 3232
     
  4. fortuner

    fortuner Нарушитель

    Регистр.:
    26 июн 2012
    Сообщения:
    558
    Симпатии:
    902
    PHP:
    SELECT
    name
    /* это имя колонки */
    value
    /* Можно еще так: name AS contact_type, тогда вместо циферок в массиве будет ['contact_type'] => 'phone' */
    FROM имя_таблицы
    WHERE contact_id
    =3232
    AND id=123 /* Это можно убрать */
     
  5. n1k.Sly

    n1k.Sly Постоялец

    Регистр.:
    7 сен 2009
    Сообщения:
    92
    Симпатии:
    7
    наверное я не правильно вопрос задал :-(

    Т.е. основу работы с БД знаю.
    Но мне нужно в php вывести в массив я даже ХЗ как объяснить т.к. я первый раз вижу такую структуру таблицы и не поинмаю как вывести все.

    Т.е. например при запросе:
    PHP:
    $q "SELECT * FROM data WHERE contact_id='3232'";

    $result $db->query($q);
    $result mysqli_fetch_object($result);

    var_dump($result);
    Я получаю:
    object(stdClass)[4]
    public 'id' => string '123' (length=3)
    public 'contact_id' => string '3232' (length=4)
    public 'field' => string 'inn' (length=3)
    public 'ext' => string '' (length=0)
    public 'value' => string '8888888888' (length=10)
    public 'sort' => string '0' (length=1)

    Не совсем понима. либо запрос не такой, либо вывод или вобще что не так :-(

    До этого делал вывод из таблицы вида (всё норм получилось:(
    id | name | surname | phone | adress | mail
     
  6. v1rus74

    v1rus74

    Moderator
    Регистр.:
    2 авг 2016
    Сообщения:
    75
    Симпатии:
    91
    PHP:
    $q "SELECT * FROM data WHERE contact_id='3232'";

    $result $db->query($q);
    $row $result->fetch_assoc();

    var_dump($row);
     
    n1k.Sly нравится это.
  7. n1k.Sly

    n1k.Sly Постоялец

    Регистр.:
    7 сен 2009
    Сообщения:
    92
    Симпатии:
    7
    Теперь так:

    array (size=6)
    'id' => string '123' (length=3)
    'contact_id' => string '3232' (length=4)
    'field' => string 'inn' (length=3)
    'ext' => string '' (length=0)
    'value' => string '88888888888' (length=10)
    'sort' => string '0' (length=1)

    Но я всё равно не понимаю как это использовать :-(
    Как мне вывести из таблицы phone, inn, adres
     
  8. v1rus74

    v1rus74

    Moderator
    Регистр.:
    2 авг 2016
    Сообщения:
    75
    Симпатии:
    91
    PHP:
    $q "SELECT * FROM data WHERE contact_id='3232'";

    $result $db->query($q);
    while (
    $row $result->fetch_assoc())
        {
            echo 
    $row['field'].' = '.$row['value'].PHP_EOL;
        }
     
    n1k.Sly нравится это.
  9. n1k.Sly

    n1k.Sly Постоялец

    Регистр.:
    7 сен 2009
    Сообщения:
    92
    Симпатии:
    7
    Блин пробовал while но из-за недостатка знаний чутка не так делал :-(
    Спасибо большое!
     
  10. Freeman08

    Freeman08 Создатель

    Регистр.:
    27 сен 2008
    Сообщения:
    27
    Симпатии:
    7
    Я немного направлю вас в нужное русло. То, что вы сейчас делаете это хорошо, но далеко здесь не уехать, да и не нужно. Сейчас так никто не пишет и не делает. Есть уже готовые решения ввиде orm или active record. Простыми словами: есть уже код, который делает всю выборку за вас со всеми экранированиями и проверками.

    Я бы посоветовал:
    1. Научитесь писать/строить сложные sql запросы на чистом sql
    2. А уже после переводить их на язык этих самых "orm" или прочих интерфейсов работы с базой

    Вот пример того, что я имею ввиду из документации laravel

    PHP:
    $flights App\Flight::where('active'1)
                   ->
    orderBy('name''desc')
                   ->
    take(10)
                   ->
    get();
    - замените ::where('active', 1) на ::where('contact_id', 3232) - и система построит запрос, который вам нужен сама.
    - уберите take(10) и он выберет все записи, а не только 10 первых
    - уберите orderBy - и не будет сортировки

    Согласны, что код выше значительно короче, удобней и понятней кода, который написан выше? (если еще убрать, то, что не нужно, так это вовсе одна строка)

    п.c. я не умею ввиду, что вам нужно прыгать сейчас на ларавел. Напротив - он отчасти сложен. Можно взять чтонибудь намного попроще
     
    n1k.Sly нравится это.
Статус темы:
Закрыта.