2013-02-13 19 views
6

Bu sql keman olduğunu: http://sqlfiddle.com/#!2/e6acc/4Farklı sonuç/phpmyadmin

Ve yinelenen girdileri sayılan olmak istiyorum çünkü doğru sonucu gösterir.

Ama mysql/phpmyadmin üzerinde çalıştırdığınızda, sonuç şudur:

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 

Her şey 1. Zaten benim pc yeniden başlatılması. ve hala aynı. Neden? Sadece csv tablolarını mysql'mden keman'a aldım.

düzenleme: Tamam, bu daha da kötüye gidiyor. benim ön-ucunda, çalışma diğer kimlikleri görüntülediğinizde: enter image description here

Ama benim sorguya id değiştirip phpmyadmin üzerinde girdiğinizde hala, bu hala gösteriyor 1.

+1

için JOIN (SELECT @curRow:=0) r gelen hat 27 yerel olarak MySQL hangi sürümü çalıştıran edildi: Aşağıdaki sorguyu kullanın? Sanırım bu söylemeye gerek yok, ama tüm tabloları ve kayıtları, Fiddle ve mysql verileriniz arasında kesin bir eşleşme olduğunu ve tam olarak aynı sorguyu çalıştırdığınızı kontrol ettiniz mi? – mellamokb

+0

Ayrıca, iç sorguların her birini tek tek çalıştırırsanız, satırlar her iki ortam arasında da aynı sırayla geri dönüyor mu? İlk alt sorguda bir "SİPARİŞ BY" var, ama ikinci değil, mysql tablolarda satırların (ve ekleme sırası) keyfi sıralaması muhtemelen sonuçta bir fark yaratabilirsiniz. Bir şeyin sırasına göre bir belirsizlik olmadığından emin olmak istersiniz. – mellamokb

+0

@mellamokbtheWise Mesajımı düzenledim. Tam olarak aynı sorguyu ancak ön uç sitemde de farklı sonuçları var. – jeffmangum

cevap

0

Bilmiyorum SQL Fiddle'ın neden gerçek sonuçtan farklı olduğuna dair herhangi bir fikriniz var, ancak PHP'de benim için çalışmayı başardım.

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 

Değiştim tek şey JOIN (SELECT @curRow:=0, @prevRow:= '') r

+0

Bu sorudan, sorgularda kullanabileceğiniz @var'ları öğrendim. Onları hiç bilmiyordum ve birkaç kez daha önce kullanmış olabilirdim. Teşekkürler :) – neelsg

İlgili konular