【问题标题】:Sr.No Not coming Properly in PHP MYSQLSr.No 在 PHP MYSQL 中没有正确出现
【发布时间】:2014-11-06 06:57:14
【问题描述】:

我想显示我的产品列表如下:

Sr.No | Name | Type 
--------------------
1     |  aa  | 2
2     |  bb  | 2
3     |  cc  | 3
4     |  dd  | 2
5     |  cc  | 4 

但它的到来如下

Sr.No | Name | Type 
--------------------
3     |  aa  | 2
5     |  bb  | 2
1     |  cc  | 3
4     |  dd  | 2
2     |  cc  | 4 

当有任何新条目时: 但它的到来如下

Sr.No | Name | Type 
--------------------
4     |  aa  | 2
5     |  bb  | 2
2     |  cc  | 3
6     |  dd  | 2
3     |  cc  | 4 
1     |  ec  | 5     // this below are two new entry made 
7     |  fc  | 4 

以上应该如下:

Sr.No | Name | Type 
--------------------
1     |  aa  | 2
2     |  bb  | 2
3     |  cc  | 3
4     |  dd  | 2
5     |  cc  | 4 
6     |  ec  | 5     // this below are two new entry made 
7     |  fc  | 4 

这不是我想要按名称排序,我只想要正常的 Sr.No 根据条目.. 意味着如果我先添加任何条目然后 Sr.No 1、2、3 等等..

但是当我添加任何新条目时,它的 Sr.No 会被更改,但它应该是最后一个 sr.no

以下是我尝试过的:

SELECT (@cnt := @cnt + 1) AS rowNumber, orn.name, orn.type ,  u.* 
FROM  ofr AS u 
CROSS JOIN (SELECT @cnt := 0) AS dummy
LEFT JOIN  or_name AS orn ON u.id=orn.id 
GROUP BY u.id ORDER BY rowNumber AND u.add_datetime DESC

请注意 (@cnt := @cnt + 1) AS rowNumber 正在生成序列号,并且此值在 $cols "Sr.No" 下传递.. Sr.No 是列名,仅此而已.. . 它的值来自“rowNumber”

列表调用方式如下:

$result =   get_details()

$cols = array( 
        _("Sr.No.")=>array('align'=>'center'),
        _("Name")=>array('align'=>'center'),
        _("Type")=>array('align'=>'center')
       );

$table =& new_db_pager('tablename', $result, $cols, 'ofr','id',10); 

$table->width = "95%";

display_db_pager($table);

数据库:

id : bigint(20)     UNSIGNED    No  None    AUTO_INCREMENT

注意:以上格式来自http://frontaccounting.com/ 演示链接:http://demo.frontaccounting.eu/

【问题讨论】:

  • 试试 - ORDER BY rowNumber, u.add_datetime DESC
  • 嘿,这也是对的 .. 但是序列号没有正确出现 .. 我的意思是它不是按照添加的日期 .. 当我添加任何新条目然后 sr.no 得到更改 .. 但它不应该发生..好像我添加了任何新条目然后分配给新条目的 sr.no 应该是最后一个 sr.no +1 ...但它不工作得到改变
  • 你也可以用php来做。
  • 我知道 count , count++ 在 while 循环中......但在这里我没有使用任何 while 循环来列出其标准格式:demo.frontaccounting.eu 在数组分页中调用......并且没有得到我如何在其中构建相同的内容
  • 你传递的是$result中的数据,按需生成即可。

标签: php mysql numbers number-formatting serial-number


【解决方案1】:

在仔细阅读问题后,我将删除旧答案并写一个新答案。

您似乎正在尝试为表中的每个新条目自动分配一个序列号,并且您希望该编号保持不变。有一个专门针对这类问题的工具:自增整数。插入记录时无需设置该字段——数据库会自动分配下一个数字。

在您的 DDL 中,您指定需要一个整数、自动递增且不为空的字段:

CREATE TABLE ofr (
    serial MEDIUMINT NOT NULL AUTO_INCREMENT,
    ... the rest of your fields ...
)

当您查询表时,您不必进行任何花哨的行计数。只需选择序列字段以及您想要的所有其他内容。

人们一直使用它来在表中生成唯一 ID。它也经常用作主索引键。更多信息请访问MySQL reference

【讨论】:

  • 嘿 slashingweapon :感谢您的回复..但我使用了自动增量系统...请检查我的问题最后一行“数据库:id:bigint(20) UNSIGNED No None AUTO_INCREMENT”...原因我不使用这个是..假设我有 1,2,3,4,5 条目,我删除了我的 4 或 3 数字条目,那么新条目将是 6 而不是 4 或 3 ..同样顺序也会改变。 .如果我删除我的 4 或 3 条目,而新条目得到相同的数字,那么它会令人困惑..希望你明白我的意思..再次感谢..希望其他解决方案。
  • 嘿,在这里和那里我只是用简单的查询检查:“ SELECT (cnt := cnt + 1) AS rowNumber, u.* FROM ofr AS u , (SELECT cnt := 0) AS dummy WHERE 1 GROUP BY u.id ORDER BY u.id DESC " -- 猜猜它工作我得到了正确的序列号......我认为连接查询有问题???
  • 是的,我得到它是因为 LEFT JOIN " LEFT JOIN or_name AS orn ON u.id=orn.id " //// 但为了演示,我刚刚创建了另一个表并用它替换了上面的 LEFT JOIN然后 ..IST 工作正常 .. 但上面的左连接不是为什么...左连接 or_name ... 数据库“id smallint(6) 无 无 AUTO_INCREMENT”
  • 我想我只是不明白你想要达到什么目的。这对我来说没有任何意义。我不明白您为什么不只使用已有的ID。从您所说的一切来看,它应该完全按照您的意愿行事。它有什么问题?
  • 自动增量不形成正确的序列号..例如:1,2,3,4,5,6,7,8,9,10...等..因为如果我们删除一些条目然后该数字将不会再被看到.. 例如:如果我删除 10 id 那么我的新条目将是 11 而不是 10 ..这不是按照序列号没有订购 ..无论如何感谢到目前为止的支持 :)跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 2011-10-17
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 2012-05-22
  • 2014-11-23
相关资源
最近更新 更多