查询2个表,其中一个字段链接到2个不同的值
我正在尝试进行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时,我什么都没有。
我想我在我的请求中错过了某些东西,当我在哪里......并且,我该怎么做才能得到正确的输出结果?真正的要求很长,如果可能的话,我想避免另一个冗长的子查询。
它可以通过两种方式来完成,无论是与上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
谢谢,它工作正常!当数据库包含数千个条目时,你知道哪一个是最快的吗? – 2013-03-27 14:52:24
@JayZus我的猜测是,第一个可能会更快,但我从来没有比较过这样的查询,所以这只是一个猜测。如果你测试他们,请让我知道哪一个执行拜特。 – 2013-03-27 15:36:15
'(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
我知道这一点,但我如何指定我希望这2个日期来自2个不同的entry_date?我想获得有两个entry_dates为'23/03/2013'和另一个'24/03/2013' – 2013-03-23 18:31:30
的条目是否只想选择entries.entry_id或entry_date表中的数据? – 2013-03-23 19:02:28