如何在mysql中选择最新的条目?

时间:2010-04-17 19:34:59

标签: php mysql

我想从表中选择最近的条目,看看该条目是否与用户尝试输入的条目完全相同。如何查询“从最近的'发布'条目中选择*”?

    $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'
     ";

5 个答案:

答案 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

将查询限制为最后一个(最近的)条目