这是 sql fiddle :http://sqlfiddle.com/#!2/e6acc/4
它显示了正确的结果,因为我希望枚举重复的条目。
但是当我在 mysql/phpmyadmin 上运行时,结果是这样的:
1515 Abdominal
1100 Hep B Inj Fee
40 1-Ligation
40 1-Ligation
900 1-Suturing Fee
900 1-Suturing Fee
900 1-Suturing Fee
900 1-Suturing Fee
都是1。我已经重启了我的电脑。它仍然是一样的。这是为什么?我刚刚将 csv 表从我的 mysql 检索到 fiddle 。
编辑: 好的,这越来越奇怪了。在我的前端,当我查看其他 ID 时,它会工作:
但是,当我更改查询中的 ID 并在 phpmyadmin 中输入时,它仍然显示 1。
最佳答案
我不知道为什么 SQL Fiddle 与实际结果不同,但我设法让它在 PHP 中为我工作。使用以下查询:
SELECT
c.procno,
CONCAT(CASE WHEN cnt > 1 THEN CONCAT(RN,'-') ELSE '' END, t.Proc) Proc
FROM
(
SELECT
@curRow:=CASE WHEN @prevRow = a.Proc THEN @curRow+1 ELSE 1 END AS rn,
a.Proc,
a.Procno,
@prevRow:=Proc grp
FROM (
SELECT
`incurredcharges`.`procedure_no` procno,
`c`.`procedure` proc
FROM
incurredcharges
INNER JOIN (
SELECT `procedure`, `procedure_no` FROM `charges`
UNION ALL
SELECT `confinement`, `procedure_no` FROM `confinement`
UNION ALL
SELECT `service`, `procedure_no` FROM `ultrasound`
) c ON `incurredcharges`.`procedure_no` = c.`procedure_no`
WHERE `incurredcharges`.`patient_no` = '34'
ORDER BY `c`.`procedure`
) a
JOIN (SELECT @curRow:=0, @prevRow:= '') r
) t JOIN
(
SELECT
`incurredcharges`.`procedure_no` procno,
`c`.`procedure` proc, Count(*) cnt
FROM
incurredcharges
INNER JOIN (
SELECT `procedure`, `procedure_no` FROM `charges`
UNION ALL
SELECT `confinement`, `procedure_no` FROM `confinement`
UNION ALL
SELECT `service`, `procedure_no` FROM `ultrasound`
) c ON `incurredcharges`.`procedure_no` = c.`procedure_no`
WHERE `incurredcharges`.`patient_no` = '34'
GROUP BY `incurredcharges`.`procedure_no`,
`c`.`procedure`
) c ON t.proc = c.proc
我唯一更改的是第 27 行,从 JOIN (SELECT @curRow:=0) r
到 JOIN (SELECT @curRow:=0, @prevRow:= '') r
关于php - SQL fiddle 和 MySQL 服务器/PhpMyadmin 中的结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14863961/