我想从表中选择最近的条目,看看该条目是否与用户尝试输入的条目完全相同。如何查询“从最近的'发布'条目中选择*”?
$query="Select * FROM
//confused here
(SELECT * FROM posting ORDER BY date_added DESC)
WHERE user_id='{$_SESSION['user_id']}'
AND title='$title'
AND price='$price'
AND city='$city'
AND state='$state'
AND detail='$detail'
";
$data = mysqli_query($dbc, $query);
$row = mysqli_fetch_array($data);
if(mysqli_num_rows($data)>0)
{
echo "You already posted this ad. Most likely caused by refreshing too many times.";
echo "<br>";
$linkposting_id=$row['posting_id'];
echo "See the <a href='ad.php?posting_id=$linkposting_id'>Ad</a>";
}
else
{
...insert into the dbc
}
//would this query work? or how do i use it to select the last ID in the table 'posting'?
$query="SELECT LAST_INSERT_ID(posting)
WHERE user_id='{$_SESSION['user_id']}'
AND title='$title'
AND price='$price'
AND city='$city'
AND state='$state'
AND detail='$detail'
";
答案 0 :(得分:10)
订单需要在查询结束时出现。所以你要求的查询是这样的:
select * from posting where .... order by date_added desc limit 1;
一次性表单令牌也有助于防止重复提交。
答案 1 :(得分:4)
根据您的评论,以下任一查询都将检索单个最新记录:
SELECT * FROM posting ORDER BY date_added DESC LIMIT 1
SELECT * FROM posting ORDER BY posting_id DESC LIMIT 1
答案 2 :(得分:1)
您的表格中通常会有一个唯一标识符,并为该列提供auto_increment
。你可能已经有了这样的标识符。
然后,您可以使用PHP的mysql_insert_id()或mySQL的LAST_INSERT_ID()获取最新记录的ID。
后者更可取,因为根据手册,它会保持每个连接的计数 ,因此其他进程或网页不会搞砸其间的计数。从PHP手册中可以确定PHP函数是否也一样。
答案 3 :(得分:1)
我建议您在桌面上创建一个唯一的密钥,而不是按照您的描述进行操作。这样,您可以避免重复内容,而无需同时使用您的应用程序的用户数量。如果A插入某些内容,B插入其他内容,然后A再次提交,则您的解决方案将失败。
向现有表添加唯一键的示例:
ALTER TABLE posting add UNIQUE KEY uk_posting (title, price, city)
将title, price, city
替换为必须唯一的字段组合。然后你所要做的就是在插入时处理错误。
答案 4 :(得分:0)
使用LIMIT 1