foreach循环期间重复记录

时间:2013-06-19 18:29:31

标签: php sql

我有一个查询可以提取新闻报道,然后附上与特定故事相关的任何照片。这一切都很好,但我最近添加了一个功能,也可以拉出与故事连接的视频,并导致重复的图像或视频链接显示。

例如,我有一个有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);
}

2 个答案:

答案 0 :(得分:0)

很难说没有做一些实际测试,但我会尝试处理您的$resultarray_unique($result),看看是否能消除重复项。

正如其他人上面所说,看看你是否可以print_r($result)为我们而且也许我们可以弄清楚发生了什么。如果可以,也可以发布SQL提取行。

答案 1 :(得分: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时,您需要确保输出相同的名称 和两个查询中的列数。

在你的代码中,你可以遍历新闻项目然后有一个内部 循环播放照片和视频,没有重复检查以查看是否 这个新闻报道与最后一个重复。