見出し、ストーリー、日付などを表示する MySQL テーブルからニュース ストリームを取得しています。これらのニュース記事は、PHP の foreach ループから生成され、正常に動作します。
画像用とビデオ用の 2 つの MySQL テーブルがあります。これらのテーブルには、news テーブルの一意のフィールドにリンクする news_id という列があります。アイデアは、各ニュース記事に添付されているビデオや画像が自動的に表示されるということです。
ただし、このコードは正しく機能しません。たとえば、ストーリーに 3 つの一致する画像と 1 つのビデオがある場合、実際にはそのビデオが各画像の隣に 1 つずつ、3 回出力されます。同じように、5 つのビデオと 1 つの写真があった場合、その写真が 5 回表示されます。
ニュースの横に画像を引っ張るだけのときはコードは正常に機能しましたが、ビデオテーブルも追加してから問題が発生しました。クエリと foreach ループを書き直す必要があると思いますが、方法がわかりません。私の推測では、メインの foreach 内に 2 つの foreach ループが必要です。1 つは画像用、もう 1 つはビデオ用です。
私がそれをどのように機能させたいかは次のとおりです。
ニューステーブルの見出し、日付、ストーリー
画像テーブルから引き出された任意の photo_url
video_url はビデオ テーブルから取得されます
その後、次の見出しなど。誰かがこれを構造化するのを手伝ってくれますか?
参考までに、これは現在使用されているクエリです。
$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);
現在使用されている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('<h3><a href="parknews.php?park_id=%s">
%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="max-height: 250px; max-width: 250px" 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" allowfullscreen></iframe>' . PHP_EOL, $row['location'] );
}
}
このコードを正しく機能させて、必要に応じてデータを表示するにはどうすればよいですか? しかし、私が言ったように、すべてを完全に書き直す必要があると思います。