我正在寻找一个表字段,该表字段的数值基于表中的行数,并且还按ASC中的标题编号。
有这样的东西吗?
任何帮助大大增加
更新
似乎这是一个坏主意...在PHP中是否有任何方法可以计算所有行并按ID查找行号并让所有行按ASC排序?
答案 0 :(得分:0)
每当删除表行时触发一个事件,只需通过递增所有行中的自定义行ID来重新排序它。
答案 1 :(得分:0)
正如其他已经说过的,这是错误的方法,但是如果你需要重新编号(例如它对排序列有效),这里是查询:
UPDATE
tabaleName
SET
fieldName = fieldName - 1
WHERE
fieldName > 5
ORDER BY
fieldName
ASC
由于你使用的是自动增量,你必须重置它
ALTER TABLE tableName AUTO_INCREMENT=10000
但请注意,我发布这个仅用于教育目的。这是错误的方法!
答案 2 :(得分:0)
您似乎需要的是在查询时特定于时间的行数。其他数据库通过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查看可能的解决方案。我对这种解决方案的性能(或EXPLAIN EXTENDED)感兴趣。
答案 3 :(得分:0)
您可以通过查看表格来完成此操作。我偶尔需要一个产生已经编号的行的选择查询,并且使用变量很容易做到这一点。
这样的事情:
SELECT @count:=@count+1, t.* FROM (SELECT * FROM <your-table>) t, (SELECT @count:=0) z;
答案 4 :(得分:0)
响应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:=@i+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>