Оптимизировать запросы

Тема в разделе "Базы данных", создана пользователем Q_BASIC, 16 мар 2015.

Модераторы: latteo
  1. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    Доброе время суток :)

    Изучая код движка, нашел в одном месте примерно такую штуку:

    PHP:
    $items $db->query('SELECT * FROM `items`');
    foreach(
    $item $items->fetch()){
            
    $item $db->query('SELECT * FROM `descr` WHERE `id`='.$item['id'])->fetch();
            
    print_r($item);
    }
    То есть, сначала берем весь список из таблицы `items`, а потом берем описание для каждого итема отдельным запросом.

    Как это оптимизировать?
     
  2. Girt

    Girt Постоялец

    Регистр.:
    11 фев 2012
    Сообщения:
    87
    Симпатии:
    62
    Судя по тому, что написано, например вот так:
    PHP:
    $items $db->query('SELECT * FROM `items`, `descr` WHERE `items.id` = `descr.id`');
    foreach(
    $item $items->fetch()){
            
    print_r($item);
     
  3. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    А это как тогда?
    PHP:
    $items $db->query('SELECT * FROM `items` WHERE `type`=4');
    foreach(
    $item $items->fetch()){
            
    $item $db->query('SELECT * FROM `descr` WHERE `id`='.$item['id'])->fetch();
            
    print_r($item);
    }
     
  4. Girt

    Girt Постоялец

    Регистр.:
    11 фев 2012
    Сообщения:
    87
    Симпатии:
    62
    PHP:
    $items $db->query('SELECT * FROM `items`, `descr` WHERE `type`=4' AND `items.id` = `descr.id`');
    foreach($item = $items->fetch()){
            print_r($item);
     
    Q_BASIC нравится это.
  5. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    А как сделать, чтобы если в `descr` нет такого ID, то из `items` всё равно взять запись?

    Пример:
    В `items` есть одна запись, в `descr` нет ничего. Надо всё равно взять запись из `items`, но написать что в `descr` к нему ничего нет.
     
  6. Girt

    Girt Постоялец

    Регистр.:
    11 фев 2012
    Сообщения:
    87
    Симпатии:
    62
    PHP:
    $items $db->query('
    SELECT * FROM `items` WHERE `type`=4
    LEFT OUTER JOIN `descr` ON `items.id` = `descr.id`
    '
    );
    foreach(
    $item $items->fetch()){
            
    print_r($item);