while循环用于检查标题并添加一个数字(如果它已经存在)

时间:2016-12-15 11:07:44

标签: php while-loop

我想从表单中获取标题并将其写入数据库。但如果标题已存在,我想在标题中添加数字1。我可以自己解决这个问题,但问题是如何(在添加1之后)再次检查并且如果标题+1已经存在使其标题为+2依此类推...... 我有什么想法构建一个while循环吗?

$title = $_POST["title"]; 
$sql = "SELECT * FROM [my_table] WHERE title='$title'";
$result = mysqli_query($con, $sql);
if(mysqli_num_rows($result) > 0) {
  $title = mysql_real_escape_string($_POST["title"]);
  //$title + add 1 to the title

} else {
  $title = mysql_real_escape_string($_POST["title"]); 
}

3 个答案:

答案 0 :(得分:0)

一种可能的解决方案是计算具有相同标题的寄存器数量。例如:

$sql = "SELECT COUNT(*) AS count FROM [my_table] WHERE title='$title'";
$result = mysqli_query($con,$sql);
$row = mysqli_fetch_assoc( $result);
$count = $row['count'];

然后:

if($count > 0) {
  $title = mysql_real_escape_string($_POST["title"]);
  $title .= $count;

} else {
  $title = mysql_real_escape_string($_POST["title"]); 
}

答案 1 :(得分:0)

要完全从PHP完成此操作,我会一次性从DB中获取所有匹配标题的列表,然后继续尝试新的数字直到一个不匹配:

$title = $_POST["title"]; 

//Get everything from the database that starts with $title
$sql = "SELECT title FROM [my_table] WHERE title like '$title%'";
$result = mysqli_query($con,$sql);

//Create a list of existing titles
$aTitles = array();
while($row = mysql_fetch_assoc($result)){
    $aTitles = $row['title'];
}

//Now see how many numbers we have

$iNum = 0;
$sTempTitle = $title;

while (in_array($sTempTitle, $aTitles)){
    //This one exists. Try the next number
    $iNum++;
    $sTempTitle = sprintf('%s %d', $title, $iNum);
}

$title = $sTempTitle;

答案 2 :(得分:0)

titlenumber suffix作为标题的一部分不是一个好习惯。

实现这一目标的更好方法是在title列中添加count列,增加count ON DUPLICATE KEY。您必须将title列设置为UNIQUE。然后,您可以通过连接SELECT来在row['title'] . "-" . row['count']上建立标题。

如果出于任何原因想要保留当前结构,即标题是:

  • <title>
  • <title-count>

您必须使用title LIKE 'some_title%读取现有标题。

  • 如果不存在则添加它,如果存在,只需添加新行;
  • 如果它已经存在,请通过增加计数来更新行(请注意,您必须先解析标题,即按,拆分并获取最后一个元素 - 这是您的号码。

注意:这不是线程安全的,您必须使用SQL事务才能正常工作。