2013-08-28 115 views
0

我需要使用cakephp和mysql將字符串傳遞給存儲過程。未找到列:1054'字段列表'中的未知列'PlantingBlock.id'

這裏是我傳遞到存儲過程中的字符串,

PlantingBlock.id IN (13,10) 
下面

是我的存儲過程,

SET whereClause = " AND 1 = 1 "; 
IF(in_clause IS NULL OR in_clause = '') THEN 
    SET whereClause = CONCAT(whereClause, ' AND ',in_clause); 
END IF; 

SET statement = 'SELECT PlantingBlock.* FROM (
    SELECT PB.*, 
    B.block, 
    V.variety, 
    ST.size_type, 
    PLA.date AS plant_date, 
    PLA.week_no, 
    C.crop, 
    C.id AS crop_id 
    FROM lf_planting_blocks AS PB, 
     lf_blocks AS B, 
     lf_properties AS P, 
     lf_property_types AS PT, 
     lf_size_types AS ST, 
     lf_varieties AS V, 
     lf_plantings AS PLA, 
     lf_crops AS C 
    WHERE 
     PB.block_id = B.id 
     AND B.property_id = P.id 
     AND P.property_type_id = PT.id 
     AND B.size_type_id = ST.id 
     AND PB.variety_id = V.id 
     AND V.crop_id = C.id 
     AND PB.planting_id = PLA.id 
     AND PB.plant_still_active = true 
     AND B.is_deleted = false 
     AND P.is_deleted = false 
     AND PT.is_deleted = false 
     AND ST.is_deleted = false 
     AND V.is_deleted = false 
     AND C.is_deleted = false'; 

SET statement = CONCAT(statement, whereClause, ') AS PlantingBlock ORDER BY PlantingBlock.plant_date DESC'); 

這給出了一個錯誤調用, SQLSTATE [42S22]:不是列發現:1054'字段列表'中的未知列'PlantingBlock.id'

回答

0

問題是您嘗試將條件添加到內部選擇,同時參考id列使用給這個子查詢的別名。

所以你要麼用括號密切子查詢和應用WHERE子句的外SELECT

SELECT PlantingBlock.* 
FROM 
(
    ... 
) AS PlantingBlock 
WHERE PlantingBlock.id IN (13,10) 
ORDER BY PlantingBlock.plant_date DESC 

或更好,但只是參考id字段在你內心的選擇。

SELECT PlantingBlock.* 
FROM 
(
    ... 
    AND PB.id IN (13,10) 
) AS PlantingBlock 
ORDER BY PlantingBlock.plant_date DESC 
+0

@Irawana如果你覺得自己的答案有幫助請考慮** [接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-解決它。 – peterm

相關問題