0

重複レコードがある場合を除いて機能する次のクエリを実行しています(id(主キー、int)フィールドと変更された(タイムスタンプ)列を除いて重複し、重複する列が多数あります。重複は人の結果ですフォームで送信ボタンを複数回押す (それも修正する必要がありますが、それは別の問題です). クエリは次のとおりです。

$sql = "SELECT COUNT(id) AS rcount,
    SUM(num_guests) AS gcount,
    DATE_FORMAT(modifed, '%%m-%%Y') AS adate,
    SUM(1st_visit REGEXP '^no') AS repeat_guest
    FROM reservation_stats
    WHERE establishmentid = %i
    AND num_guests > 0
    GROUP BY adate
    ORDER BY added";

SUM に重複を含めたくありません。私はmysqlとphpを使用しています。

ありがとう

PSテーブル構造:

 id     int(10)          
establishmentid     int(11)         
name    varchar(50)     
email   varchar(100)    
phone   varchar(30)     
num_guests  int(11)         

reservation_time    varchar(50)     
reservation_date    date            
1st_visit   varchar(10)     
data    text    
added   date        
modifed     timestamp 

PPS: 私の質問は、Tom の提案の後にあります:

 $sql = "SELECT COUNT(*) as rcount, SUM(num_guests) AS gcount, 
DATE_FORMAT(added, '%%m-%%Y') AS adate, 
1 as repeat_guest 
FROM 
( SELECT added, name, email, phone, num_guests, 
  reservation_time, reservation_date 
FROM reservation_stats where establishmentid = %i 
GROUP BY added, name, email, phone, num_guests, 
  reservation_time, reservation_date 
\) dup 
group by adate 
order by added";

ありがとうトム。元のクエリから repeat_guest データが失われることを除いて、これは機能します。どうすれば保存できますか?

PPPS: ちょっと待って、これはどう?

        $sql = "SELECT COUNT(*) as rcount, SUM(num_guests) AS gcount, DATE_FORMAT(added, '%%m-%%Y') AS adate,    SUM(repeat_guest)                       
            FROM
            (
             SELECT  added, name, email, phone, num_guests, reservation_time, reservation_date, SUM(1st_visit REGEXP '^no') AS repeat_guest
             FROM    reservation_stats
             where establishmentid = %i
             GROUP BY added, name, email, phone, num_guests, reservation_time, reservation_date
            ) dup
            group by adate order by added";

動作しているように見えますが、それは私が思っていることをやっていますか?

4

1 に答える 1

1

FIELD1、FIELD2、および FIELD3 が重複する可能性のあるフィールド (および num_guests) である場合、次のようなことができます。

SELECT COUNT(*) rcount, SUM(num_guests) AS gcount

FROM
(
 SELECT  FIELD1, FIELD2, FIELD3, num_guests
 FROM    YOUR_TABLE
 GROUP BY FIELD1, FIELD2, FIELD3, num_guests
) dup
于 2012-10-26T19:05:42.110 に答える