2012-02-22 54 views
1

我有一个表名的偏好下这有多个列,但我感兴趣的只有两列是user_preferences_nameuser_preferences_status需要多个事件标志MySQL查询下一个列在一个表中

注PLZ 在user_preferences_name柱有像

user_preferences_name user_preferences_status  phone_service_id 
    a       1       555 
    b       0       456 
    c       0       236 
    d       1       122 
    e       1       456 
    f       0       777 
    g       0       555 
    h       0       888 
    i       1       112 
    .       .       . 
    .       .       . 
    .       .       . 

多个标志有许多user_preferences_name我只需要(A,b,F,q,W)和它们各自的user_preferences_status(1,1,0,1,0)

我在做什么基本上是我创建一个HTML表单,其中有5个不同的div我每个div有2个单选按钮。 为一个: - 如果一个user_preferences_status == 1比启用单选按钮将被设置其他明智的禁用将设置为5潜水和单选按钮相同。 什么我尝试:

class Prefrances extends Zend_Db_Table{ 

function Get_User_Prefrences($phone_service_id){ 
    $DB = Zend_Db_Table_Abstract::getDefaultAdapter(); 
    $select = $DB->select() 
     ->from('user_preferences' , array('user_preferences_name','user_preferences_value')) 
     ->where('phone_service_id = ?', $phone_service_id) 
     ->where('user_preferences_name = ?', 'a') 
     ->where('user_preferences_name = ?', 'b') 
     ->where('user_preferences_name = ?', 'f') 
     ->where('user_preferences_name = ?', 'q') 
     ->where('user_preferences_name = ?', 'w'); 
    return $select; 
    } 
} 

result = no rows 我觉得我的逻辑是错误的,你可以PLZ指导我什么,我需要在这里, 一般MySQL查询,也适用我会改变它的Zend

回答

0
$select = $DB->select() 
    ->from('user_preferences' , array('user_preferences_name','user_preferences_value')) 
    ->where('phone_service_id = ?', $phone_service_id) 
    ->where('user_preferences_name IN (?)', array('a', 'b', 'f', 'q', 'w')); 
+0

老板你说得对,我的查询语法错误虽然IN不工作。 ..BTW thanx – 2012-02-22 12:53:18

0

你创造了一个矛盾,例如下雨和不下雨,这从来都不是真的。 在你的情况下

SELECT user_preferences_name, user_preferences_value FROM user_preferences 
WHERE 
    phone_service_id = $phoneserviceid 
    AND user_preferences_name = 'a' 
    AND user_preferences_name = 'b' 
    AND user_preferences_name = 'f' 
    AND user_preferences_name = 'q' 
    AND user_preferences_name = 'w'; 

永远不可能是真的。 你可以改用像garvey这样的子选择,或者如果它是一个'永远'的静态子集,你可以添加一列来识别这个子集