2013-06-19 96 views
0

我有一個查詢,可以獲取新聞報道,然後附加與特定故事相關的任何照片。這一切工作正常,但我最近添加了一個功能,以拉動與故事連接的視頻,它會導致重複的圖像或視頻鏈接顯示。在foreach循環中複製記錄

例如,我有一個3張圖片和1個視頻的新聞故事。目前它在每幅圖片旁邊張貼了一個視頻,所以它顯示了3次。我實際想要展示的是新聞故事,然後是任何圖片,然後是任何視頻。

這裏是PHP

$sLastStory = ''; 
foreach ($result AS $row) 
{ 
    $sStory = $row['headline'] . $row['story']; 
    if (strcasecmp($sStory, $sLastStory) != 0) 
    { 
     if (!empty($sLastStory)) 
     { 
      print('<hr>' . PHP_EOL); 
     } 
     $sLastStory = $sStory; 


     printf('<h2>%s</h2>' . PHP_EOL, $row['headline']); 

     printf('<a href="parknews.php?park_id=%s"> 
     <h3>%s</a> - %s</h3>' . PHP_EOL, $row['park_id'], $row['name'], $row['Displaydate']); 

     printf('<p>%s</p>' . PHP_EOL, $row['story']); 
    } 

if(!empty($row['url'])){ 
printf(' 
<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s - Credit - %s" > 
<img src="/images/%s%s-thumb.jpg" style="min-height: 200px; min-width: 200px" alt="%s"/></a>' . PHP_EOL, $row['url'], $row['alt'], $row['headline'], $row['description'],$row['credit'], $row['url'], $row['alt'], $row['alt']); 
} 

if(!empty($row['location'])){ 
printf('<iframe width="640" height="360" src="%s" frameborder="0" allowfullscreen></iframe>' . PHP_EOL, $row['location']); 
} 

} 

我不是偉大的PHP和公正複製這一部分:

if(!empty($row['url'])){ 
printf(' 
<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s - Credit - %s" > 
<img src="/images/%s%s-thumb.jpg" style="min-height: 200px; min-width: 200px" alt="%s"/></a>' . PHP_EOL, $row['url'], $row['alt'], $row['headline'], $row['description'],$row['credit'], $row['url'], $row['alt'], $row['alt']); 
} 

然後粘貼它下面,但改變了它的視頻查詢,而不是圖像。 任何想法如何解決它顯示正確? 感謝

編輯:這是查詢

try 
{ 
$sql = 'SELECT headline, story, DATE_FORMAT(date, "%d-%M-%Y") AS Displaydate, name, logo, tpf_parks.park_id, url, alt, description, credit, location 
FROM tpf_news 
INNER JOIN tpf_parks ON tpf_news.park_id = tpf_parks.park_id 
LEFT JOIN tpf_images ON tpf_news.news_id = tpf_images.news_id 
LEFT JOIN tpf_videos ON tpf_news.news_id = tpf_videos.news_id 
ORDER BY date DESC' ; 
$result = $pdo->query($sql); 
} 
+1

請張貼您用於檢索這些行的查詢,我懷疑您有交叉連接正在進行。 –

+1

從我可以看到它看起來像它可能是您的SQL語句的問題,如果它一直拉住兩者。但最好使用兩個單獨的語句並逐個循環。一個用於圖片,一個用於視頻。 – Jon

+0

只是編輯問題 - 查詢現在在那裏。 – themeparkfocus

回答

0

硬而不做一些實際的測試說,但我會嘗試處理您的$result通過array_unique($result),看看有沒有不消除重複。

正如其他人上面所說,看看你是否能爲我們print_r($result),也許我們可以弄清楚發生了什麼。如果可以,也發佈SQL提取行。

+1

如果'array_unique'能夠解決這個問題,那麼SQL語句需要被寫得更好,而不是使用這個函數。 – Jon

+0

@Jon:同意,但這是一行代碼,用於解決與重寫整個SQL查詢的問題。 –

+0

查詢現在已編輯到問題中。謝謝 – themeparkfocus

0

寫入SQL的方式是,每個照片或 視頻返回一行,但視頻行也包含指向照片的鏈接,反之亦然。 你真正想要的是UNION,它表示你的意圖是顯示 照片和視頻的總和。我會建議使用兩個查詢。首先, 只會獲得故事詳情。

第二個會得到照片和視頻。然後,您可以合併基於news_id的 數據結構。

SELECT tpf_news_id, ... FROM tpf_images JOIN tpf_news ON tpf_news.news_id = tpf_images.news_id 
UNION 
SELECT tpf_news_id, ... FROM tpf_videos JOIN tpf_news ON tpf_news.news_id = tpf_videos.news_id; 

當您使用UNION,你需要確保你輸出的同名 和兩個查詢柱的側向承載力數量。

在您的代碼中,您可以循環播放新聞內容,然後爲照片和視頻創建一個內部 循環,而無需重複檢查以查看此新聞故事是否與最後一個重複。

+0

有沒有什麼機會可以將它們混合在一起。我以前從未使用UNION,而且我最好是新手。這聽起來像我需要改變很多。謝謝 – themeparkfocus

+0

是的,在UNION的每個部分中,您還可以選擇標題,故事等。所有行將包含故事詳情,然後是圖像細節和空視頻細節,或者空圖像細節,但是視頻細節。你的代碼將保持與你現在擁有的更相似。我不認爲這明確表達了你的意圖,但它會起作用。給聯盟一槍,我想你會覺得很容易。假設MySQL,下面是一些文檔:http://dev.mysql.com/doc/refman/5.0/en/union.html –

+0

謝謝,我今晚會處理它。 – themeparkfocus