查询2个表,其中一个字段链接到2个不同的值

时间:2013-03-23 18:02:34

标签: mysql sql zend-framework zend-db

我正在尝试进行SQL查询,但我遇到了一些问题。

CREATE table entries (
id_entry INT PRIMARY KEY,  
);

CREATE table entry_date (
  entry_date_id INT PRIMARY KEY,
  entry_id INT,
  entry_price INT,
  entry_date TEXT,
);
每个条目

,有几个日期。

我想选择entries.entry_id,例如,该条目与其关联的日期'23 / 03/2013'和'24 / 03/2013'。

这两个日期存储在一个数组中:

 $data = array('ci' => '23/03/2013', 'co' => '24/03/2013');

我将日期存储在文本中,以便在我的治疗中使用。 我使用Zend_Db,因此我的查询构造如下:

$select = $table->select ()->from ( 'entries' )->setIntegrityCheck ( false );

        if ($data ['ci'] != NULL) {
            $select->join ( array (
                    'entry_dates' => 'entry_dates' 
            ), 'entries.id_entry = entry_dates.entry_id' );
            $select->where ( 'entry_dates.entry_date = ?', $data ['ci'] );
        }
        if ($data ['co']) {
            if ($data['ci'] == NULL) {
            $select->join ( array (
                    'entry_dates' => 'entry_dates' 
            ), 'entries.id_entry = entry_dates.entry_id' );}
            $select->where ( 'entry_dates.entry_date = ?', $data ['co'] );  
        }

给出:

SELECT `entries`.*, `entry_date`.* 
FROM `entries` 
INNER JOIN `entry_dates` 
ON entries.id_entry = entry_dates.entry_id 
WHERE (entry_dates.entry_date = '23/03/2013') 
AND (entry_dates.entry_date = '24/03/2013')

而且,嗯......它不起作用。 当我拿到我的$ select时,我什么都没得到。

我想当我做WHERE时,我在想法中遗漏了一些东西...而且,我该怎么做才能获得正确的输出?真正的请求真的很长,如果可能的话,我想避免另一个长的子选择。

1 个答案:

答案 0 :(得分:1)

可以通过两种方式完成,或者在entry_date表上使用自联接:

SELECT `entries`.entry_id
FROM `entries` 
INNER JOIN `entry_dates` AS ed1
ON entries.id_entry = ed1.entry_id 
INNER JOIN `entry_dates` AS ed2
ON entries.id_entry = ed2.entry_id 
WHERE ed1.entry_date = '23/03/2013'
AND ed2.entry_date = '24/03/2013'

或使用汇总

SELECT `entries`.entry_id
FROM `entries` 
INNER JOIN `entry_dates` AS ed
WHERE ed.entry_date = '23/03/2013'
OR ed2.entry_date = '24/03/2013'
GROUP BY `entries`.entry_id
HAVING COUNT(DISTINCT ed.entry_date)=2