如何获取sql表的ID行号?

时间:2010-11-17 16:14:32

标签: php sql

假设我需要打印第3,第5,第9,第20,第34等等......

4 个答案:

答案 0 :(得分:2)

根据位置,行在数据库中没有实际意义(至少我想不出任何)。你为什么关心它的实际行位置?

您如何知道第3条记录是您要删除的记录?匹配ID,匹配其他字段中的短语,执行某些操作以将记录唯一标识为您要访问的记录。通过行位置执行此操作不会为您执行此操作。

如果您有五条记录都完全匹配,并且您只想删除一条记录,则将LIMIT 1添加到DELETE语句的末尾。如果它们确切,则行无关紧要。第3或第5或第7个没关系,因为它们完全匹配您的查询。因此,请删除一个匹配的查询。

现在听起来好像是以某种顺序向用户显示数据表,这可能会也可能不会重复,并允许他们选择删除行。您将获取实际的行位​​置,而不是存储每个显示的行的主键。然后,当用户选择删除时,您只需将附加的主键用于该行并删除该行。

你说“其他几个字段的主键是相同的” - 这不可能是真的,因为你不能拥有相同的主键。我现在认为你的数据库设计存在一些缺陷。发布一个表模式,并准确地说明您正在做什么。如果你把自己放到设计的角落里(听起来像是这样),就没有意义了。

(我无法对其他帖子发表评论,因此必须在此帖中修改更新内容)

答案 1 :(得分:1)

您还可以使用行号变量:

SELECT * FROM (
    SELECT t.*, 
        @rownum = @rownum + 1 AS rank
    FROM TABLE t, (SELECT @rownum := 0) r
    ORDER BY ID
    LIMIT 0, 34
) Q
WHERE rank in (3, 5, 9, 20, 34)

我会尝试巧妙地使用LIMIT,否则每次都会扫描整个表格。


根据您对场景的描述......

  

我的场景:我只需要删除一行......有几个相同的行..所以使用带有where子句的删除将删除所有这些行。另外,假设有5个相同的行......我需要删除这5行中的第三行......

你真的需要小心这个,否则你删除错误的行。想想一个好的标准,可以区分你要删除的行和其他行,比如..你想要删除最新的,还是除了最新的...

您可以使用@rownum技巧的扩展版本从每个组中删除N. ..但在我进入之前,最好还是了解更多有关您的具体问题的信息。


啊现在这里的猴子出了袖子:

  

假设有5个相同的行..用户点击第3行并要求删除... a查询将不会有效,因为它删除匹配where子句或所有行的第一行匹配它..我怎么删除只有第三行,并保持所有其他完整.. ???

忘了我说的一切。您需要在表格中使用AUTO_INCREMENT字段,唯一标识您的记录。然后你可以使用DELETE FROM table WHERE id = $id。感谢OMG小马的OP治疗;)

答案 2 :(得分:0)

LIMIT子句的OFFSET部分与SELECT查询一起使用。

你想做什么?

答案 3 :(得分:0)

SQL表中的行没有任何特定顺序。您可以按特定字段对它们进行排序,例如我假设的ID是自动增量值。如果您希望按ID排序第二行,则可以执行查询,例如

SELECT * FROM MyTable ORDER BY ID LIMIT 1,1

要获得第19行,你可以

SELECT * FROM MyTable ORDER BY ID LIMIT 18,1

使用limit语句返回一组特定的行。如果需要第10行到第19行,可以使用

SELECT * FROM MyTable ORDER BY ID LIMIT 9,10

在limit语句中,第一个数字表示行号(基于0),第二个数字表示要返回的行数。