簡體   English   中英

帶有內部聯接和限制的mysql子查詢

[英]mysql subquery with inner join and limit

我有兩個帶有列的表recipes_sa

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

和帶有列的chefs_sa

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

而且我想使用INNER JOINLIMIT獲得有限數量的食譜及其廚師詳細信息

我做了以下功能:

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_sa recipes_name中有“ recipes_name recipes_sa ”列, recipes_sa我了解,數據庫首先運行“ 內部查詢 ”(有限制的查詢 ),然后如何找不到“配方名稱”列!

另一種執行方法是按配方排序,然后限制為最新的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

你已經化名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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM