2011-08-04 40 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())"; 
相關問題