我正在查找一个基于表中行数的数值的表字段,并且还通过ASC中的标题对其进行了编号。PHP MySQL数据库自动增量基于行数
有没有这样的事情?
任何帮助非常Apreciated
UPDATE
其看来,这是一个糟糕的主意......有没有在PHP中的任何方法来计算所有的行,并找到ID的行数,并有所有由ASC订购的行?
我正在查找一个基于表中行数的数值的表字段,并且还通过ASC中的标题对其进行了编号。PHP MySQL数据库自动增量基于行数
有没有这样的事情?
任何帮助非常Apreciated
UPDATE
其看来,这是一个糟糕的主意......有没有在PHP中的任何方法来计算所有的行,并找到ID的行数,并有所有由ASC订购的行?
为响应OP对一些通用的解决方案的请求......
考虑以下...
SELECT recipe FROM recipes ORDER BY recipe;
+---------------------------------+
| recipe |
+---------------------------------+
| Beans & Macaroni |
| Beans on Jacket Potato |
| Beans on Toast |
| Cheese & Beans on Jacket Potato |
| Cheese & Beans on Toast |
| Cheese on Toast |
| Macaroni & Cheese |
| Peanut Butter on Toast |
| Toast & Jam |
+---------------------------------+
MySQL Method 1.
SET @i = 0;
SELECT @i:[email protected]+1 rank, recipe FROM recipes ORDER BY recipe;
+------+---------------------------------+
| rank | recipe |
+------+---------------------------------+
| 1 | Beans & Macaroni |
| 2 | Beans on Jacket Potato |
| 3 | Beans on Toast |
| 4 | Cheese & Beans on Jacket Potato |
| 5 | Cheese & Beans on Toast |
| 6 | Cheese on Toast |
| 7 | Macaroni & Cheese |
| 8 | Peanut Butter on Toast |
| 9 | Toast & Jam |
+------+---------------------------------+
MySQL Method 2.
SELECT COUNT(*) rank, x.recipe FROM recipes x JOIN recipes y ON y.recipe <= x.recipe GROUP BY x.recipe ORDER BY rank;
+------+---------------------------------+
| rank | recipe |
+------+---------------------------------+
| 1 | Beans & Macaroni |
| 2 | Beans on Jacket Potato |
| 3 | Beans on Toast |
| 4 | Cheese & Beans on Jacket Potato |
| 5 | Cheese & Beans on Toast |
| 6 | Cheese on Toast |
| 7 | Macaroni & Cheese |
| 8 | Peanut Butter on Toast |
| 9 | Toast & Jam |
+------+---------------------------------+
PHP Method
<?php
include('../testi.inc');
$query = "SELECT recipe FROM recipes ORDER BY recipe;
;";
$result = mysqli_query($db,$query);
$x='';
while($row = mysqli_fetch_assoc($result)){
$x[] = $row['recipe'];
}
?>
<table>
<tr>
<td>
<?
for($i=0;$i<count($x);$i++){
$j = $i+1;
echo $j."</td><td>".$x[$i]."</td></tr>\n<tr><td>";
}
?>
</td></tr>
</table>
触发,只要您的表行被删除刚刚在所有行增加了自定义行ID重新定购的事件..
触发器已在评论中提及.. – Ahmad
当我发布我的答案,它不在那里..只有前2个评论可用... – user2991491
至于其他已经说过,这是错误的做法,但如果你需要重编(它是有效的,例如排序列),这里是查询:
UPDATE
tabaleName
SET
fieldName = fieldName - 1
WHERE
fieldName > 5
ORDER BY
fieldName
ASC
而且,由于使用的是自动递增,你必须重新设置
ALTER TABLE tableName AUTO_INCREMENT=10000
但是p租赁,请注意,我只是为了教育目的而发布此信息。这是错误的方法!
呃..什么是正确的方法? –
为什么你想重新编号的行 – Vineet1982
你似乎需要的是在查询时按行编号的时间。其他数据库通过像ROWID(oracle)或ROW_NUMBER(T-SQL,MS-SQL-Server)这样的方法来解决这个问题,您可以在这里为当前记录集生成一行列,如下所示:
SELECT column1, column2,ROW_NUMBER()OVER(column3,column4)as rownumber
这将在尊重删除行的同时生成行号。可悲的是,MySQL不支持这样的功能。
您可以使用变量来模拟行为,对于找到的每条记录都会增加。在mysql.number here上使用CROSS JOIN查看可能的解决方案。我对这种解决方案的性能(或解释扩展)感兴趣。
您可以通过查看表格来做到这一点。我偶尔需要一个选择查询来产生已经编号的行,并且用变量很容易做到这一点。
事情是这样的:
SELECT @count:[email protected]+1, t.* FROM (SELECT * FROM <your-table>) t, (SELECT @count:=0) z;
设置柱为int自动增量,你需要什么? – Ahmad
但如果我删除一条记录,它不会重新编号一切吗?最有可能是一个缺口,就像我有1,2,3,4,5和我删除3它会导致1,2,4,5,我需要它导致1,2,3,4 –
以及是该列的内容,不会改变,您可以执行插入/更新时运行的触发器来为您更新特定列 – Ahmad