2012-09-05 58 views
1

好的,所以我在MySQL中有這兩個表。一個被稱爲「歷史」,一個被稱爲「註釋」。如何將兩個不同的MySQL表中的元素打印在一起

「歷史記錄」表格中包含隨機的YouTube視頻ID,可以重複使用。 'Annotated'表包含每個視頻ID的唯一副本以及該ID的說明。看起來是這樣的:

History       Annotated 

videoid     videoid   description 

videoid_1     videoid_1  descript_1 
videoid_1     videoid_2  descript_2 
videoid_3     videoid_3  descript_3 
videoid_2     etc.    etc. 
videoid_3 
videoid_1 
etc. 

我試圖從歷史記錄表,重複全部打印出一組特定的視頻的ID的。這很簡單。問題是我需要在他們旁邊打印他們的描述。

所以我有一個我想打印的歷史視頻ID的數組,我試圖編寫一個MySQL命令,它將打印旁邊的相應描述,但它不能正常工作。這是我到目前爲止有:

$implodedIdVideo = the array of specific history video id's, imploded for MySQL 

SELECT History.videoid, Annotated.description 
FROM History, Annotated 
WHERE History.videoid = Annotated.videoid 
AND History.videoid IN ($implodedIdVideo) 
ORDER BY History.videoid DESC"; 

while($row = mysql_fetch_array($query)){ 
echo $row['videoid']. " : ". $row['description']; 
echo "<br />"; 
} 

這上面MySQL命令的作品,但它應該給我像10分的結果,但我越來越喜歡50,我不知道爲什麼。我希望如果有人明白我想要做什麼,他們將能夠識別我做錯了什麼?

+0

videoid不是唯一的嗎?如果他們應該重複,做一個DISTINCT – ohr

+0

當你說你期望10個結果,但得到50,你是否期待10,因爲歷史上有10行?或者歷史中是否有10個獨特的行? –

+0

@ohr videoid在註釋中是唯一的,但在歷史中不唯一 – AzzyDude

回答

1

這是因爲您的歷史記錄表中有重複的內容,所以服務器會爲每個記錄返回一個描述。嘗試在ORDER之前添加GROUP BY History.videoid。

完整的查詢應該是這樣的:

SELECT 
    History.videoid, Annotated.description 
FROM 
    History, Annotated 
WHERE 
    History.videoid = Annotated.videoid 
AND 
    History.videoid IN ($implodedIdVideo) 
GROUP BY 
    History.videoid 
ORDER BY 
    History.videoid DESC"; 
+0

哇,那工作!我的腦袋現在太融化了,以處理髮生的事情,但謝謝!只有一件事缺失,這是由於某種原因,這個查詢不是打印包含在$ implodedIdVideo中的重複視頻ID? – AzzyDude

+0

@AzzyDude:你能重新表達這個問題嗎?我無法理解你想問什麼。(對不起,但我的母語不是英語。) – Babblo

0

鑑於你的History表,看起來你有幾乎幾乎重複的記錄:videoid_1 v.s. Videoid_1。請注意0​​與v

MySQL的字符串比較默認情況下不區分大小寫的,所以當你做你的加入在查詢中,History.Videoid_1值將匹配Annotated.videoid_1Annotaded.Videoid_1,基本上是重複你的結果。

如果你確實打算將這些混合大小寫的標識符,你要強迫二進制比較,這使得它區分大小寫:

WHERE BINARY History.videoid = Annotated.videoid 
     ^^^^^^ 

或切換你的兩個表,一個區分大小寫的排序規則。

0

您爲每個視頻ID獲得多個行,因爲你必須在歷史中的每個VideoID的多行。但事情是,在查詢中,您似乎並不需要History中的任何信息。你可以在不加入任何其他表的情況下查詢Annotated,所以我不確定你爲什麼加入了History。它具有的唯一影響是你觀察到的那一行,那些行是重複的。

+0

我需要歷史表,因爲ID的確切順序是必要的。我可以打印好訂單,如下所示:id_1,id_1,id_2,id_3,id_1但我需要在每個旁邊打印說明。如果我查詢註釋,我只是得到一個不按順序排列的唯一描述列表 – AzzyDude

+0

您的ORDER BY子句指定了由videoid排序,這是註釋中的列。訂單應顯示爲id_1,id_1,id_1,id_2,id_3,而不是您所說的順序。 – Hammerite

+0

是的,我認爲這是錯誤的,我想要的命令是像id_1,id_1,id_2,id_3,id_1但我不知道熱保持該順序 – AzzyDude

相關問題