我有一张用户付款表。我需要为每笔交易指定收据代码,所以我需要知道最后一笔交易是什么?如果以前没有收据,我想添加第一个 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() ...
的返回值,即使表是空的。
答案 0 :(得分:16)
您可以使用IFNULL
作为:
SELECT IFNULL(MAX(receipt), 1000) FROM tbl_payments;
答案 1 :(得分: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)
编辑:如果您要查看用户已经有一个,如果没有,要插入一个新行,据我所知,单个查询无法完成,但以下情况应该有效: / p>
$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。它更安全,功能更多。
答案 2 :(得分:2)
我还建议使用auto_increment值,并通过insert_id确定当前的收据编号。只需执行INSERT
- 查询,然后再使用例如mysqli_insert_id即可获取所插入付款的ID。
如果要以值1000开头,则可以更改自动增量列的起始值。我发现这是设置自动增量以1000开始
ALTER TABLE tbl_name AUTO_INCREMENT = 1000
答案 3 :(得分: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)
)