2012-02-20 4 views
2

Всеподзапрос возвращает более чем на 1 строку

У меня есть две таблицы enter image description here

первая таблица: wp_frm_item_metas второй стол: wp_frm_items

Теперь я хочу meta_value на основе wp_frm_items полей таблицы значения ,

Я уволил этот sql. она возвращает меня подзапрос возвращает более чем на 1 строку

SELECT meta_value 
FROM wp_frm_item_metas 
WHERE (item_id=(
    SELECT id 
    FROM wp_frm_items 
    WHERE form_id ='9' && user_id='1') 
&& field_id=128) 

Я попытался это решение

SELECT meta_value 
FROM wp_frm_item_metas 
WHERE (item_id=(
    SELECT count(*) as c,id 
    FROM wp_frm_items 
    WHERE form_id ='9' && user_id='1') 
&& field_id=128 && c > 1) 
ORDER BY c DESC 

Он возвращает эту Операнд ошибке должно содержать 1 столбец (ы)

Мой код

foreach($fp_id_c as $kid=>$id) 
{ 
    if (!$id or ($logged_in && !$user_ID)) return; 
    $id = (int)$id; 

    //echo $logged_in.'-'.(int)$user_ID; 
    if ($logged_in){ 
     echo $ff_id_c[$kid]; 
     global $wpdb; 
     echo "SELECT meta_value FROM wp_frm_item_metas WHERE (item_id=(SELECT count(*) as c,id FROM wp_frm_items WHERE form_id ='$kid' && user_id='". (int)$user_ID ."') && ORDER BY c DESC && field_id=$ff_id_c[$kid])"; 
     $result_c= $wpdb->get_var("SELECT meta_value FROM wp_frm_item_metas WHERE (item_id IN (SELECT count(*) as c,id FROM wp_frm_items WHERE form_id ='$kid' && user_id='". (int)$user_ID ."') && field_id=$ff_id_c[$kid]) ORDER BY c DESC"); 
     echo $result_c; 
    } 
} 
+0

Все, что вы пытаетесь сделать, ваша логика не работает, вы не можете сделать 'WHERE item_id = (SELECT COUNT (*), как с, идентификатор)' ... Вы выбираете двух столбцов (count & id) и сказать, что они должны быть равны ONE столбцу (item_id). – Konerak

+0

Можете ли вы показать пример данных? – shahkalpesh

ответ

5

Попробуйте Оговорка в

SELECT meta_value FROM wp_frm_item_metas 
WHERE (item_id IN (
        SELECT id FROM 
        wp_frm_items WHERE 
        form_id ='9' && user_id='1' 
        ) 
     && field_id=128 
     ) 
1

Пробег:

WHERE item_id IN (<your sub query>) вместо WHERE item_id=

1

Я вижу, вы объединения двух таблиц. Почему бы вам не сделать это обычным способом? :)

select meta_value from wp_frm_item_metas metas 
join wp_frm_items items on 
items.id = metas.item_id 
where items.form_id = 9 and items.user_id = 1 and metas.field_id = 128 
Смежные вопросы