如何管理必须唯一的重复sql值?

时间:2013-05-10 12:45:56

标签: sql duplicates

我网站的用户可以按表单提交post titlepost contentpost title将被保存并转换为SEO友好模式(eg: "title 12 $" -> "title-12")。这将是这篇文章的网址。

我的问题是,如果用户输入的标题与之前输入的标题相同,则这些帖子的网址将相同。那么可以通过在标题的末尾附加一个数字来自动修改新标题吗?

例如

  

“title-new” - > “title-new-1”或db中存在“title-new-1”   将其转换为“title-new-2”

对不起,我是新手,也许这很容易,谢谢你的帮助。

我正在使用PDO。

3 个答案:

答案 0 :(得分:0)

保存帖子标题时,您可以查询数据库是否存在?如果它存在,则只需附加一个数字并再次查询,如果它再次存在则将其递增1,因此。

答案 1 :(得分:0)

在数据库中选择该标题,并使用rowCount()检查您有多少结果。如果结果为0:您可以添加它,如果结果为n,则将n添加到标题中。

要附加使用类似的东西(不正确):

$count = $del->rowCount(); //Assuming this returns 1

if($count){
  $title = $title . "-" . $count;
}

这会给你“thedplicatetitle-1”

答案 2 :(得分:0)

谢谢@Ratna& @Borniet为您的答案。我将解释的代码发布给任何其他想要它的用户。如果有添加或删除somrthing或更好的方式请告诉我。

//首先我要搜索“新的未更改的标题名称”,它是否存在于db中。

$newtitle= "tst-title";   
$dbh = new PDO("mysql:host=localhost;dbname='dbname', 'usrname', 'password');
$stmt = $dbh->prepare("SELECT * FROM `tablename` WHERE `col.name` = ? LIMIT 1");
$stmt->execute(array($newtitle));
if ( $stmt->rowCount() < 1 ) {
// enter sql command to insert data
    }
else {
$i='0';
do{
$i++;
$stmt = $dbh->prepare("SELECT * FROM `tablename` WHERE `url` = ? LIMIT 1");
$stmt->execute(array($newtitle.'-'.$i));
}
while($stmt->rowCount()>0);
// enter sql command to insert data
}

就是这样。我分成两部分的原因是因为我想在网址上添加“ - ”而不是数字。