【发布时间】:2012-11-03 07:35:22
【问题描述】:
是的,我真的很希望有人可以帮助我,因为我很难过。基本上,我正在为使用 mysql 数据库和 php 的公司重新设计网站,以提供新闻存档类型部分。除了一件事,一切都很好。我从数据库中提取信息以提供 sn-p 视图,并使用 mysql 数据库中的 newsTitle 列将信息放入相应锚点的链接文本中,该链接文本可以使用 $_GET 函数从相应页面检索。问题是,虽然主要是唯一的,但有许多新闻标题条目是重复的,但每个条目的内容是不同的。旧网站通过在每个副本(在页面上)的末尾添加后缀 -0 然后 -1 等等来处理这个问题,但我不知道如何做到这一点。
我需要检查的变量是 $title/$url 中包含的所有其他版本的 $title/$url 生成的变量。请注意:我必须使用后缀而不是 id 来使每个页面都独一无二,因为这是旧版本网站所做的,我不想破坏来自 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> </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> </p>
<p><?php echo $shortdescription; ?></p>
<p> </p>
<p> </p>
</div>
<?php
$i++;
}
?>
【问题讨论】:
-
有很多方法可以做你想做的事,但为什么不把 ID 放在它们后面,让它们都独一无二呢?
-
请不要再使用 mysql_* API。它正在被社区弃用。这是非常不安全和低效的。改为使用 PDO 或 mysqli 和准备好的语句。
-
每条记录的 newsID 值是否唯一?
-
newsID 值对于每条记录都是唯一的,但要注意的是——当前版本的网站在 url 中没有 id,只有标题——所以如果我将 id 添加到url 我将无法匹配当前站点的 url,并且将失去所有的 pagerank,更不用说人们被定向到一个不存在的页面。我将使用 .htaccess 重写网址,但由于每篇文章的 id 不同并且有 1640 篇文章,我无法编写通用重定向规则,并且单独进行重定向需要很长时间,所以我需要匹配旧网站的带后缀的网址
标签: php mysql while-loop duplicates unique