MySQL подзапрос с внутренним соединением и пределом - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть две таблицы recipes_sa со столбцами:

recipes_id   recipes_name   recipes_chef
----------   ------------   ------------

и chefs_sa с колонками:

chefs_id   chefs_name
--------   ----------

И я хочу получить ограниченное количество рецептов с указанием их данных от шеф-повара, используя INNER JOIN и LIMIT

Я сделал следующую функцию:

function getLimitJoinData($data, $tbls, $ids, $abr, $type, $limit) {

            $dataToSelect = implode($data, ',');

            $q = "SELECT $dataToSelect";

            $q.= " FROM (SELECT * FROM $tbls[0] LIMIT $limit) $abr";


            for ($i=1; $i < count($tbls); $i++) { 
                $q .= " ".$type." JOIN ". $tbls[$i] ." ON " . $abr.'.recipes_chef' .' = '. $ids[$i-1][0];   
            }
        }

И запрос такой

SELECT chefs_sa.chefs_name,
       recipes_sa.recipes_name 
FROM (SELECT * FROM recipes_sa LIMIT 8) rec 
INNER JOIN chefs_sa ON rec.recipes_chef = chefs_sa.chefs_id

Но при выполнении запроса у меня было следующее предупреждение:

Предупреждение: PDO :: query (): SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'recipes_sa.recipes_name' Я не понимаю, почему

У меня есть столбец recipes_name в таблице recipes_sa, и из того, что я прочитал, база данных сначала запускает « внутренний запрос » (тот, который имеет ограничение), затем столбец recipes_name не найден !!

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

У вас есть псевдоним recipes_sa AS rec. Используйте следующее:

SELECT chefs_sa.chefs_name,
       rec.recipes_name 
FROM (SELECT * FROM recipes_sa LIMIT 8) rec 
INNER JOIN chefs_sa ON rec.recipes_chef = chefs_sa.chefs_id
0 голосов
/ 03 сентября 2018

Другой способ сделать это - заказать по рецептам, а затем ограничиться последними 8, а не иметь подзапрос:

SELECT cs.chefs_name, rs.recipes_name 
FROM recipes_sa rs
INNER JOIN chefs_sa cs ON rs.recipes_chef = cs.chefs_id 
ORDER BY rs.recipes_name ASC LIMIT 8
...