2011-08-04 102 views
0

我正在尝试根据发布类别提取相关的帖子。因此,所有类别ID都与类别ID字段匹配。带有2个表的MySQL查询以获得期望的结果

附加澄清:

我整个上午,仍然没有运气一直在尝试,这是我在现在的位置。请注意ON子句中的$ CatID来自上面的查询,并且该值是正确的。

$sql = " 
(SELECT 
    a.id, 
    a.Price, 
    a.City, 
    a.Country, 
    a.Title, 
    a.Description, 
    a.Category, // contains the corresponding ads_cate.id. 
    a.recdate, 
    c.cateName, 
    'item' AS type FROM ads_list AS a 
     LEFT OUTER JOIN ads_cate AS c 
      ON $CatID=a.Category 
      WHERE to_days(now())<=(to_days(recdate)+14) 
      ORDER BY RAND()) 
"; 

和所测试:

echo $CatID . $row['Category']; // Outputs 3 3 which is correct. Category is 3 ads_cate id is also 3 for this record. 

我的结果是一式两份,且所有广告拉动类别无关。

+0

您是否有一个查询不起作用?你有没有工作的PHP? – Randy

+0

您能更清楚地描述一下您希望看到的输出数据吗? – TehShrike

+0

我不明白。 – johnny

回答

0

尽管我不明白你的问题,但在使用连接时,可以使用SELECT DISTINCT来停止重复项。除此之外,我不明白这个问题。

+0

我有一段时间解释这一点。让我再尝试一次。我基本上只是试图只在ads_cate表的Category域(ads_post的关系id字段)等于$ CateID的ads_post记录中。我无法使用id(为此创建了单独的查询),因为它与ads_list的id冲突。这有帮助吗? – OldWest

+0

我的问题的一部分是我在我之前的评论中将我的表命名为错误。讨论的表格是:ads_cate和ads_list,以消除我创建的混乱。 – OldWest

1

如果广告有一个类别,并假设你ads_cate表有一个id场:

$sql = " 
    SELECT 
     a.id, 
     a.Price, 
     a.City, 
     a.Country, 
     a.Title, 
     a.Description, 
     a.Category, // contains the corresponding ads_cate.id. 
     a.recdate, 
     c.cateName, 
     'item' AS type 
    FROM ads_list AS a 
    LEFT OUTER JOIN ads_cate AS c 
    ON c.id=a.Category 
    WHERE to_days(now())<=(to_days(recdate)+14) 
    AND a.Category = $CatID 
    ORDER BY RAND() 
"; 
+0

你的两个假设都是正确的。现在没有结果显示。我应该提到我正在使用:MySQL 4.1.14。我还应该澄清,实际上有满足查询要求的ads_list项目。 – OldWest

+0

基于你的方向,我终于得到了这该死的东西工作!非常感谢您的提示。 – OldWest

+0

现在我注意到我刚刚使用了从游览原始代码粘贴的'LEFT OUTER JOIN'。我的意图是建议一个'INNER JOIN'。 – bfavaretto

0

这是我工作的代码。必须根据bfavaretto的建议修改一些建议,但现在按预期工作:

$sql = " 
(SELECT 
a.id, 
a.Price, 
a.City, 
a.Country, 
a.Title, 
a.Description, 
a.Category, 
a.images, 
a.recdate, 
a.images, 
a.image2, 
a.image3, 
a.image4, 
a.imgWidth, 
a.imgHeight, 
a.ftype, 
c.id, 
c.cateName, 
a.email, 
'item' AS type FROM ads_list 
AS a LEFT OUTER JOIN ads_cate 
AS c ON c.id=a.Category WHERE to_days(now())<=(to_days(recdate)+14) AND a.Category =  $CatID ORDER BY RAND())"; 
相关问题