Получение двух строк из 1 таблицы одним запросом

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

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

    Q_BASIC

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

    Надо получить категорию и вышестоящую категорию по parent_id

    Получить 1 категорию:
    Код:
    SELECT * FROM `cats` WHERE `id`=$id
    И этим же запросом надо получить:
    Код:
    SELECT * WHERE `id`=`запрос №1`.`parent_id`
    Если бы вторая строка была бы в другой таблице, сделал бы JOIN, а так хз
     
  2. Black Hat

    Black Hat Постоялец

    Регистр.:
    15 май 2015
    Сообщения:
    107
    Симпатии:
    69
    Самообъединение таблиц допустимо, например
    Код:
    SELECT level2.*, level1.name AS `parent_name`
    FROM `cats` AS `level2`
    LEFT JOIN `cats` AS `level1` ON level1.id = level2.parent_id
    WHERE level2.id = $id
    
     
    vitya39 и Q_BASIC нравится это.
  3. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    Получили 1 строку, только parent категорию.
    Код:
    PHP:
    $cat $db->prepare('
            SELECT `cat`.*, `parent`.*
            FROM `help_cats` as `cat`
            LEFT JOIN `help_cats` as `parent` ON `cat`.`parent_id`=`parent`.`id`
            WHERE `cat`.`id`=:id
        '
    );
     
        
    $cat->bindParam(':id'$els[0]);
        
    $cat->execute();
     
        while( 
    $c $cat->fetch(PDO::FETCH_ASSOC))
        {
            
    var_dump($c);
        }
     
        
    var_dump($cat->getSQL());
    Это получили:
    Код:
    array(4) {
    ["id"]=>
    string(1) "5"
    ["name"]=>
    string(27) "Категория"
    ["url"]=>
    string(0) ""
    ["parent_id"]=>
    string(1) "2"
    }
    string(160) "
    SELECT `cat`.*, `parent`.*
    FROM `help_cats` as `cat`
    LEFT JOIN `help_cats` as `parent` ON `cat`.`parent_id`=`parent`.`id`
    WHERE `cat`.`id`='12'
    "
     
  4. Black Hat

    Black Hat Постоялец

    Регистр.:
    15 май 2015
    Сообщения:
    107
    Симпатии:
    69
    Да... Тяжелый случай. Надо прописать
    level1.name AS `parent_name` и прочее чтобы родительскую достать. в примере выбирается только имя родительской.
    Если нет родителя - тоже работает, только вместо parent_name будет null
     
    look2009 и Q_BASIC нравится это.
  5. BullsBears

    BullsBears Создатель

    Регистр.:
    10 сен 2014
    Сообщения:
    12
    Симпатии:
    0
    Ребят, помогите, что за ошибка и с чем она может быть связана? Может быть из-за того, что таблицы не хватает? ERROR: Column 'amount' in field list is ambiguous
     
  6. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    В таблице, из которой получаете данные, нет столбика amount
     
  7. Black Hat

    Black Hat Постоялец

    Регистр.:
    15 май 2015
    Сообщения:
    107
    Симпатии:
    69
    Это значит что amount встречается более чем в одной таблице, и мускул растерялся, какую именно использовать. Следует уточнить по названию таблицы (или алиасу, если используется он), например items.amount для таблицы items