我目前正在设计一个发票系统,可以将发票分配给单独的项目。发票只会分配给一个项目。
目前我有一个mysql表,我想用发票号查询,检索发票所针对的相应项目的所有发票,在创建日期之前订购它们(这是我坚持的一点)根据我将查询的发票编号,计算发票在该项目总发票中的数量。
为了增加一些清晰度,我的意思是以下
URN_ID URN_Project_ID URN_Date
1 1 2012-03-17
2 3 2012-03-18
3 2 2012-03-21
4 1 2012-03-21
5 2 2012-04-05
6 1 2012-04-08
7 3 2012-04-15
8 2 2012-04-24
9 1 2012-05-02
10 3 2012-05-10
让我们说我已经查询了6号发票,因此该项目是项目1.本质上我将把信息缩小到以下
URN_ID URN_Project_ID URN_Date
1 1 2012-03-17
4 1 2012-03-21
6 1 2012-04-08
9 1 2012-05-02
我们可以从上面看到我总共有4张发票,但我想要一种方法来退回发票6是3号发票4号。这样做的目的是,如果有人在将来打印复印发票,那么查看它的人就很清楚该项目的发票3。最后,我不需要详细说明我的文档中的发票总数,只需要总数中的位置。
任何有关这方面的帮助都会非常感激,因为我早上大部分时间都在寻找解决方案,我可以拼凑起来但没有用。作为后备,我总是可以在我的表中添加另一列,并在输入阶段执行一个mysql计数,然后将总数添加到列中,但我宁愿学习新的东西并将我的表保持在最低限度。< / p>
提前感谢任何解决方案或帮助。
艾伦
修改
确定一些其他信息。
N.B。我已更新上面的列数据以反映我的实际列名称
到目前为止,我已经尝试过:
$query2 = "SELECT @curRow := @curRow + 1 AS row_number, iv.* FROM urn iv JOIN (SELECT @curRow := 0) r WHERE iv.URN_Project_ID='$urn_project_id'";
$res2 = mysql_query($query2);
$data2 = mysql_fetch_array($res2);
echo $data2['row_number'];
然而,无论我显示哪个URN_ID,它都只返回1作为值。
我对使用@符号的语句一无所知,因此不知道如何调试它。
任何帮助都会很好。
干杯。 人
答案 0 :(得分:2)
您基本上想在结果集中添加行号,例如:
SELECT @curRow := @curRow + 1 AS row_number,
iv.*
FROM invoices iv
JOIN (SELECT @curRow := 0) r
WHERE iv.project_id=1;
这应该返回:
row_number invoice id project_id invoice_date
1 1 1 2012-03-17
2 4 1 2012-03-21
3 6 1 2012-04-08
4 9 1 2012-05-02
答案 1 :(得分:0)
虽然起初看起来有点不舒服,但这可能是最好的方式。
mysql> SET @rank=0;
mysql> SELECT @rank:=@rank+1 AS rank,OtherColumns as Column FROM Invoices .....
@rank增量会做你想要的。你应该预先设置@rank变量;如果排名设置或不喜欢(未测试),可能有办法做一个案例然后结束:
mysql> SELECT case @rank when NULL then @rank=0 else @rank:=@rank+1 end as rank FROM ....