2011-03-24 31 views
0

我有以下表格:无法让MySQL查询,我需要多条记录从一个表

类别 - entry_id,CAT_ID

冠军 - entry_id,标题

DATA - entry_id,日期,正文

对于输入到DB中的每个记录,在三个表中的所有三个entry_id字段中输入相同的entry_id。在分类表中,会后为每个类别记录我已经如:

entry_id:100 CAT_ID:24

entry_id:100 CAT_ID:31

entry_id:100 CAT_ID:17

(比如CAT_ID 24 web_design,31编码和17是AJAX)

问题:我在的时候只选择有一个记录中的两者CAT_ID 24和17的记录管不着Ca tegories表与其他领域一起。这是我得到的。我知道这是原油,但它让我几乎所有的存在方式:

SELECT 
    data.entry_id, 
    data.date, 
    data.body, 
    titles.entry_id, 
    titles.title AS biz_name, 
    categories.entry_id, 
    categories.cat_id 
    FROM data, titles, categories 
    WHERE data.entry_id = titles.entry_id 
    AND data.entry_id = categories.entry_id 
    AND categories.cat_id = '24' 

这将显示的24 CAT_ID一切,但是当我添加

AND categories.cat_id = '17' 

到的查询,没有尽头返回。

有什么想法?

+0

你是什么意思添加?您在AND中检查了24和17吗?你可以请把更新的查询? – 2011-03-24 20:07:38

+0

如果他正在使用一个关键参考表,他希望'LEFT JOIN'类别表,以便他可以检查每个数据,它有两个不同的类别条目。见答案。 – 2011-03-24 20:17:49

+0

当我说我添加我的意思是我添加了最后一个片段,这导致没有记录。 – 86Stang 2011-03-24 21:09:15

回答

1
SELECT 
data.entry_id, 
data.date, 
data.body, 
titles.entry_id, 
titles.title AS biz_name, 
FROM data 
JOIN titles ON data.entry_id = titles.entry_id 
INNER JOIN categories cat1 ON data.entry_id = cat1.entry_id AND cat1.cat_id=17 
INNER JOIN categories cat2 ON data.entry_id = cat2.entry_id AND cat2.cat_id=24 
WHERE ((cat1.cat_id) = (17)) AND ((cat2.cat_id) = (24)) 

这个新查询正确过滤器只与这两个

+0

我相信这个答案是正确的,但它仍然导致零记录。难道是我的查询只是拉动Categories表中的第一个匹配记录,而不是每个entry_id匹配的所有匹配记录? – 86Stang 2011-03-24 21:07:18

+0

我的不好,我犯了一个错误。等我解决这个问题时请继续。 – 2011-03-24 21:17:03

+0

已修复,但是您无法选择类别(您已经知道它在类别17和类别24中,对吗?),而无需首先获取重复条目(每个额外类别一个),因此我将其排除在外。 – 2011-03-24 21:32:07

1

如果你想一个条件添加到另一个你使用或

.. AND (categories.id='24' OR categories.id='17'; 

这将包括24和17在结果

+0

但我只需要返回结果,他们是既存在的任何给定的记录。 – 86Stang 2011-03-24 21:48:59

+0

@ 86Stang一条记录(元组)只有一个id,对吗?在这种情况下是'24'或'17'。您的评论表明,一条记录可以有多个ID。 – 2011-03-24 22:01:20

2
SELECT 
    data.entry_id, 
    data.date, 
    data.body, 
    titles.entry_id, 
    titles.title AS biz_name, 
    categories.entry_id, 
    categories.cat_id 
    FROM data, titles, categories 
    WHERE data.entry_id = titles.entry_id 
    AND data.entry_id = categories.entry_id 
    AND categories.cat_id IN (17,24) 
相关问题