2013-08-28 4 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]: Column не найдено: 1054 Неизвестный столбец 'PlantingBlock.id' в 'списке полей'

ответ

0

Проблема в том, что вы пытаетесь добавить условие к внутреннему выбору, ссылаясь на id, используя псевдоним, который дал этот подзапрос.

Поэтому вы либо близко подзапрос с скобкой и применять WHERE положение, чтобы ваш внешний SELECT

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

или еще лучше просто сослаться на поле идентификатора в ваш внутренний выбор.

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

Смежные вопросы