1

そうです、私は困惑しているので、誰かがこれについて助けてくれることを本当に願っています. 基本的に、ニュース アーカイブ タイプのセクションを提供するために、mysql データベースと php を使用して会社の Web サイトを再設計しています。1つのことを除いて、すべて正常に機能します。データベースから情報を取得してスニペット ビューを提供し、mysql データベースの newsTitle 列を使用して、対応するページから $_GET 関数を使用して取得できる各アンカーのリンク テキストに情報を挿入します。問題は、主に一意ではあるものの、重複している多くの newsTitle エントリがあり、それぞれのコンテンツが異なることです。古い W​​eb サイトでは、各複製 (ページ上) の最後にサフィックス -0、-1 などを追加することでこれに対処していましたが、これを行う方法がわかりません。

チェックする必要がある変数は、生成された $title/$url の他のすべてのバージョンに対して $title/$url に含まれている変数です。注意: 各ページを一意にするために、ID ではなく接尾辞を使用する必要があります。これは、古いバージョンの Web サイトで行われていたことであり、Google からのリンクを壊したり、「リンク ジュース」を失ったりしたくないためです。

これが私のコードです(私はn00bなので、ひどさを許してください):

mysql_connect($host, $user, $pass) or die ("Unable to connect!"); 

@mysql_select_db($db) or die ("Unable to select database!");

$sql = "SELECT * FROM tblnews WHERE YEAR(newsDate) >= $startyear AND YEAR(newsDate) <=     $endyear AND newsPageID = 13 ORDER BY  `tblnews`.`newsDate` DESC LIMIT $offset, $rowsperpage";

$result3 = mysql_query($sql, mysql_connect($host, $user, $pass)) or die ("Unable to connect!");

$querytable="SELECT * FROM tblnews WHERE YEAR(newsDate) >= $startyear AND YEAR(newsDate) <= $endyear AND newsPageID = 13 ORDER BY  `tblnews`.`newsDate` DESC";

$result=mysql_query($querytable);


mysql_close();

$i= ($currentpage - 1) * 4;

while ($list = mysql_fetch_assoc($result3)) {

$title=mysql_result($result,$i,"newsTitle");
$titlelower = strtolower ($title);
$changedwords = array(' is ', ' with ', ' on ', ' to ', ' for ', ' the ', ' at ', ' a ', ' in ', ' of ', '"', "'", ':', '(', ')', ';', '?', '!', '.', ',', '&', '£', '/');
$replacements = array('-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '', '', '', '', '', '', '', '', '', '', '', '', '-');
$url = str_replace ($changedwords, $replacements, $titlelower);
$url = str_replace (" ", "-", $url);
$url = str_replace ("---", "-", $url);
$url = str_replace ("--", "-", $url);
$date=mysql_result($result,$i,"newsDate");
$shortdescription=mysql_result($result,$i,"newsTeaser");
$id=mysql_result($result,$i,"newsID");

?>
<div id="release" <?php if($odd = $i%2 ) { echo 'style="background-color:#d2d2d2;"';
} else { echo 'style="background-color:#dbdbdb;"'; } ?> >
<p>&nbsp;</p>
<h3><a href="questionsarticle.php?pagetitle=<?php echo $url; ?>&id=<?php echo $id; ?>"><?php echo $title; ?></a></h3>
<p style="font-size:12px;color:#666;font-style:italic;">- <?php echo date('l, jS F Y',strtotime($date)); ?></p>
<p>&nbsp;</p>
<p><?php echo $shortdescription; ?></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<?php
$i++;
}
?>
4

1 に答える 1

0

どのニュース記事がどの URL サフィックスを持つべきかという質問からは明らかではありませんが、newsID によって決定される年齢に基づいていると仮定すると、重複するタイトルごとに古いニュースの数をカウントする必要があります。

これは、tblnews をそれ自体に結合し、同じタイトルであるが特定の記事よりもニュース ID が小さい行をカウントすることによって実行できます。

各記事の古い記事の数を含む列を含む、変更されたクエリは次のようになります。

SELECT DISTINCT news.*, COUNT(older.newsID) AS older
FROM tblnews news
LEFT JOIN tblnews older
ON older.newsTitle = news.newsTitle
AND older.newsID < news.newsID
WHERE year(news.newsDate) >= $startYear
AND year(news.newsDate) <= $endYear
AND news.newsPageID = 13
GROUP BY news.newsID
ORDER BY news.newsDate DESC;
于 2012-11-15T14:17:32.180 に答える