2013-03-23 87 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

相關問題