2016-11-19 5 views
0

私には問題があります。私があなたを助けてくれることを願っています。 「transak」と呼ばれる20人以上の参加者がいる行のみを表示

それを打破するために、私はイベントを作成し、データベース内のテーブルを持って、それは「dansetimer」と呼ばれていますし、そのために私はイベントの参加者と呼ばれるテーブルを持って、

Iある時間内にいくつのイベントがカウントされ、20人以上の参加者があるかをカウントしたい

私はこれを最初に作っていますが、それも非常に良いですが、カウントする方法、私が最終的にどれだけ多くの出来事を見たか、もちろん私はリストを手動で数えることができますが、それを数えるPHP。

$hentgg = mysql_query("SELECT * FROM dansetimer WHERE dato BETWEEN $fra AND $til"); 
    if(mysql_num_rows($hentgg)) { 
    while($visgg = mysql_fetch_array($hentgg)) { 

    $result=mysql_query("SELECT count(*) as total FROM transak WHERE produkt = '$visgg[id]'"); 
    $data=mysql_fetch_assoc($result); 

    if($data['total'] > 20) { 
     echo $visgg[title]; 
    } 

    } 
    } else { 
     echo "Ingen resultater"; 
    } 

上記のコードを使用すると、イベントを取得してそれらを取得することができます。このコードでは

$result=mysql_query("SELECT count(*) as total FROM transak WHERE produkt = '$visgg[id]'"); 
    $data=mysql_fetch_assoc($result); 

私はイベントでありますどのように多くの参加者カウントし、if文で、20以上が存在する場合、私は持っていけないイベントを、非表示にすることができますテストすることができますより多くの参加者。

しかし、「あなたは、与えられた時間内に、20人以上の参加者を持つ23のイベントを開催しました」とか、そういうものを書くことができます。

+0

PHPを習得している場合は、「mysql _...」拡張で時間を無駄にしないでください。何年も前から廃止されていて、最近のPHP版には含まれていません。 PDOの学習は同じ努力を払い、より有用になります。 –

答えて

0

あなたが20人以上が参加していどのように多くのイベントを見ることができるようにあなたは、ループ内の余分なカウンターを保つことができる:

// At the start of your script 
$large_events = 0; 
... 
// In your loop: 
if($data['total'] > 20) { 
    echo $visgg[title]; 
    $large_events++; 
} 

をしかし、私はおそらくより速く、あまりにもそれが簡単だと思う、と、SQLはすでにあなたを与えるようにしますいくつかの詳細。あなたのソリューションでは、イベントごとに参加者を照会するので、1000人のイベントがあり、参加者が20人以下の場合、データベースは1001個のクエリを実行し、最終結果は「Ingen resultater」です。

ので、これにクエリを変更します。

SELECT * 
FROM 
    (SELECT 
     dt.*, 
     (SELECT count(*) FROM transak WHERE produkt = dt.id) AS total_participants 
    FROM dansetimer dt 
    WHERE dato BETWEEN $fra AND $til 
) 
WHERE 
    total_participants > 20 
ORDER BY 
    dato, 
    title 

このクエリでは、20以上の参加者とイベントのみを返し、それはイベントごとに参加者の数を返します。したがって、このクエリ結果を単純な配列にフェッチし、各項目を表示して、タイトル、参加者数、その他の情報を表示することができます。配列の長さは '大きな'イベントの数です。

PS:mysql_*機能が古く、PHP 7で削除されていることをご存知でしたか? PDOへのアップグレード時期だと思います。

+0

私はあなたの最初の提案を試みましたが、数字を書いていません。前と同じように見えます。私は$ large_events = 0を入れました。スクリプトの先頭で、ループ内のifステートメントを使用します。 –

+0

もちろん、ループが終了したあとにその番号を出力/エコー/プリントする必要もあります。 – GolezTrol

+0

はい、当然のことです;-)今、ありがとうございます! –

0

この以下のクエリを使用する必要があります。希望の出力が得られます(特定の時間内にいくつのイベントがカウントされ、20人以上の参加者があるかをカウントします)。

SELECT count(*) FROM dansetimer dt WHERE (SELECT count(*) FROM transak WHERE produkt = dt.id)>=20 and dato BETWEEN $fra AND $til 
+0

私はあなたが示唆したものに私のクエリを変更すると、それはうまくいきません。 –

+0

これは、大きなイベントの数を取得するために実行する余分なクエリです。これは、既存のクエリの代わりにはありません。 – GolezTrol

関連する問題