Php 如何选择mysql中最近的条目?

Php 如何选择mysql中最近的条目?,php,mysql,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='$c

我想从表中选择最近的条目,看看该条目是否与用户试图输入的条目完全相同。如何查询以从“过账”的最新条目中选择*

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

使用Limit 1将查询限制到最近的一个条目。通常,表中会有一个唯一的标识符,并自动递增该列。您可能已经有了这样的标识符

然后可以使用PHP或mySQL获取最新记录的ID


后者更可取,因为根据手册,它保持每个连接的计数,因此其他进程或网页不能在两者之间增加计数。从PHP手册中还不能完全确定PHP函数是否具有相同的功能。

orderby片段需要出现在查询的末尾。因此,您要求的查询是这样的:

select * from posting where .... order by date_added desc limit 1;

一次性使用表单令牌也有助于防止重复提交。

我建议在表上创建一个唯一键,而不是执行您描述的操作。通过这种方式,您可以避免重复的内容,这与并发使用应用程序的用户数量无关。如果A插入某些内容,B插入其他内容,然后A再次提交,则您的解决方案将失败

向现有表添加唯一键的示例:

ALTER TABLE posting add UNIQUE KEY uk_posting (title, price, city)

用必须唯一的字段组合替换标题、价格、城市。然后,您所要做的就是在插入时处理错误。

根据您的注释,以下任一查询将检索单个最新记录:

SELECT * FROM posting ORDER BY date_added DESC LIMIT 1

SELECT * FROM posting ORDER BY posting_id DESC LIMIT 1

我有一个自动递增的发布id。那么我该如何在这里使用最后一个插入id呢?@ggfan mm,我现在看到您没有在同一个文件中创建行。可能是最后一个插入id会失败。使用@grossvogel的解决方案,但添加另一列标识用户,例如会话ID,以防止同时插入其他广告扰乱您的查询。我相信最后一个插入ID是特定于连接的。因此,它允许您在插入之后立即在相同的php脚本中检索该id。您要求查找可能由其他进程插入的最新记录,因此它在这里不起作用。您还希望匹配某些条件,例如,不选择由其他用户插入的记录。last_insert_id是一个很好的功能,但不是针对这种情况。-1 Pekka,我通常同意您必须提交到表中的内容,但这个建议在我看来并不合适。首先,mysql_insert_id确实会对每个连接计数,但新请求不会是相同的连接!;-其次,我不会依赖自动递增字段来跟踪插入时间。它们仅用于唯一标识您的记录。您应该使用时间戳或日期/时间列来跟踪这些内容。@fireeyedboy和@grossvogel您的输入非常好,但我在上面的评论中击败了您,意识到了同样的事情:D fireeyedboy与您的第二点我不同意-获取具有最新创建日期的记录是不可靠的,因为另一个实例/用户可能同时创建了一条记录,使得查询变得无用。您需要某种唯一标识符来确定该用户最近是否添加了记录。我建议使用用户的会话ID或至少IP。如果两个或多个用户同时创建广告,则会出现问题。这将需要另一个列来唯一地标识要工作的发帖用户。这是个好主意,尽管这可能有点过于严格,取决于业务需求。