我想从表单中获取标题并将其写入数据库。但如果标题已存在,我想在标题中添加数字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"]);
}
答案 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)
将title
和number suffix
作为标题的一部分不是一个好习惯。
实现这一目标的更好方法是在title
列中添加count
列,增加count
ON DUPLICATE KEY
。您必须将title
列设置为UNIQUE
。然后,您可以通过连接SELECT
来在row['title'] . "-" . row['count']
上建立标题。
如果出于任何原因想要保留当前结构,即标题是:
<title>
<title-count>
您必须使用title LIKE 'some_title%
读取现有标题。
,
拆分并获取最后一个元素 - 这是您的号码。注意:这不是线程安全的,您必须使用SQL事务才能正常工作。