2013-03-23 56 views
0

我正在尝试进行SQL查询,并且遇到一些问题。查询2个表,其中一个字段链接到2个不同的值

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时,我什么都没有。

我想我在我的请求中错过了某些东西,当我在哪里......并且,我该怎么做才能得到正确的输出结果?真正的要求很长,如果可能的话,我想避免另一个冗长的子查询。

+0

'(entry_dates.entry_date = '23/03/2013')AND(entry_dates.entry_date = '24/03/2013')',所以你希望日期等于2013年3月23日,同时等于24/03/2013?另外我很确定MySQL不喜欢那种格式的日期文字。 – Vatev 2013-03-23 18:13:07

+0

我知道这一点,但我如何指定我希望这2个日期来自2个不同的entry_date?我想获得有两个entry_dates为'23/03/2013'和另一个'24/03/2013' – 2013-03-23 18:31:30

+0

的条目是否只想选择entries.entry_id或entry_date表中的数据? – 2013-03-23 19:02:28

回答

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 
+0

谢谢,它工作正常!当数据库包含数千个条目时,你知道哪一个是最快的吗? – 2013-03-27 14:52:24

+0

@JayZus我的猜测是,第一个可能会更快,但我从来没有比较过这样的查询,所以这只是一个猜测。如果你测试他们,请让我知道哪一个执行拜特。 – 2013-03-27 15:36:15

相关问题