3

我有一张用户付款表。我需要为每笔交易指定一个收据代码,所以我需要知道最后一笔是什么?如果没有以前的收据,我想添加第一个带有1000的收据,其他收据必须是增量的,如1001、1002、...
为此,我编写了以下代码:

$receipt = '1000';
$query_receipt = mysql_query("SELECT MAX(receipt) FROM tbl_payments");
$max = mysql_result($query_receipt,0);
if ($max != '0' || $max != '')
{
    $receipt = mysql_result($query_receipt,0) + 1;
}

当我在表中有记录时它工作正常。但是当表为空时它返回1 。我怎么解决这个问题?SELECT MAX() ...即使表为空,我也需要知道 a 的返回值。

4

4 回答 4

16

您可以使用IFNULLas 来实现这一点:

SELECT IFNULL(MAX(receipt), 1000) FROM tbl_payments;
于 2012-08-27T08:12:15.217 回答
3

你得到一个空值:

mysql> create table noRows (id int(3));
Query OK, 0 rows affected (0.03 sec)

mysql> select max(id) from noRows;
+---------+
| max(id) |
+---------+
|    NULL |
+---------+
1 row in set (0.00 sec)

但是,您可以使用合并来获得所需的内容:

mysql> select coalesce(max(id),1) from noRows;
+---------------------+
| coalesce(max(id),1) |
+---------------------+
|                   1 |
+---------------------+
1 row in set (0.01 sec)

编辑:如果您要检查它,用户已经有一个,如果没有,插入一个新行,据我所知,它不能用一个查询来完成,但以下应该工作:

$receipt = 1000;
$query_receipt = mysql_query("SELECT MAX(receipt) FROM tbl_payments");
$num_rows = mysql_num_rows($query_receipt);
if($num_rows>0)
{
    // Assumes $ID to be some unique field used to identify your customer stored in field ID.
    $sql="insert into tbl_payments (ID, receipt) values ($ID, $receipt)";
    mysql_result($sql)
}
else
{
    // Do stuff here to get the receipt from the first resultset.
}

关于这一点,您可能需要考虑放弃旧的不推荐使用的mysql_*函数并改为使用PDO。它更安全,并且具有更多功能。

于 2012-08-27T08:12:27.707 回答
2

我还建议使用 auto_increment 值,并通过 insert_id 确定您当前的收据编号。只需执行您的INSERT-Query,然后使用例如mysqli_insert_id来获取您插入的付款的 id。

如果您想从 1000 开始,您可以更改自动增量列的起始值。我发现这可以设置自动增量以从 1000 开始

ALTER TABLE tbl_name AUTO_INCREMENT = 1000
于 2012-08-27T09:11:45.120 回答
0

下面应该作为您的插入语句。不需要像上面那样使用 PHP 运行两个查询,您可以直接在 MYSQL 中执行相同的结果。

INSERT INTO tbl_payments (receipt)
VALUES 
(
(SELECT CASE WHEN MAX(p.receipt) IS NULL THEN 1000 ELSE MAX(p.receipt)+1 END AS receipt 
    FROM tbl_payments p ORDER BY p.receipt DESC LIMIT 1)
)
于 2013-04-09T17:47:47.577 回答