2016-07-14 17 views
-1

各$ number_of_auditsがその行に固有のものであることを確認するにはどうすればよいですか?これは、最後の行の値が何度も何度も繰り返されることを示しています。私はこれを行うために$ temp_rowを設定すると思ったが、何かが間違っている。私はこれがPDOではないことを知っていますが、それは後になります。PHP変数を一意のMySQL行にするにはどうすればいいですか?

while ($row = mysqli_fetch_array($result)) { 
      if($row[site_id] > 0){ 
       $qry = "SELECT count(audit_instanceID) AS AID 
        FROM audit_instance 
        WHERE auditID = {$row['auditID']} 
        AND trash IS NULL and site_id='$_SESSION[siteID]' and corporate_auditID = '0'"; 
      } 
      else { 
       $qry = "SELECT count(audit_instanceID) AS AID 
        FROM audit_instance 
        WHERE auditID = {$row['auditID']} 
        AND trash IS NULL and corporate_auditID = '0'"; 
      } 
      $temp_result = qry($qry); 
      $temp_row = mysqli_fetch_array($temp_result); 
       $number_of_audits = $temp_row['AID']; 
       if ($number_of_audits > 0) { 
        $view_audit_button="<a class='btn btn-default btn-xs' role='button' href='answer_audit.php?auditID=$row[auditID]&action=view_audits' value='View Audits: $number_of_audits' \">View Audits: $number_of_audits</a>"; 
       } else { 
        $view_audit_button=""; 
       } 

私も試してみました:

foreach ($temp_row as $number_of_audits) 
      { 
       $number_of_audits = $temp_row['AID']; 
      } 
       if ($number_of_audits > 0) { 
        $view_audit_button="<a class='btn btn-default btn-xs' role='button' href='answer_audit.php?auditID=$row[auditID]&action=view_audits' value='View Audits: $number_of_audits' \">View Audits: $number_of_audits</a>"; 
       } else { 
        $view_audit_button=""; 
       } 
+3

は、単一の「結合」クエリとして再書き込みします。 'SELECT id、count(id)FROM ... JOIN ... GROUP BY ...'を実行すると、IDとカウントが同時に取得されます。 –

+1

'$ temp_row = mysql_fetch_array($ temp_result);'突然 'mysql_ *'関数が表示されます! –

+1

'mysql_'は' mysqli'で動作しません。 Mysqliはパラメータ化されたクエリをサポートしています.PDOは必要ありません。ここでパラメータ化されたクエリを使用します。そのままSQLインジェクションにオープン。ループを作成していないため、 – chris85

答えて

1

あなたがテーブルに参加したいのようにこれが見え、マルク・Bさんのコメントが示唆のように私は、クエリを変更します。私はあなたが既にauditIDを提供するいくつかのクエリを持っていると仮定します。

SELECT [...], site_id, auditID, [...] 
FROM sometable [...] 
ような何か

迅速な解決には(いくつかは、彼らが汚れおよび/または醜い見つけるが)サブクエリのようになります。

SELECT [...], site_id, auditID, 
    (SELECT COUNT(ai.audit_instanceID) FROM audit_instance ai 
    WHERE ai.auditID = auditID 
    AND ai.trash IS NULL 
    AND ai.site_id=site_id 
    AND ai.corporate_auditID = '0' 
) as AID, [...] 
FROM sometable [...] 

その後、あなたの$rowはすでに数と、希望AIDエントリを持っています監査インスタンスの

site_idNULLの場合、問題が発生する可能性があります。その後、完全にあなたのコードは、前に言ったことを反映して

 AND (site_id IS NULL OR ai.site_id=site_id) 

に(変化する)site_idラインをチェックする必要があります。そのようなケースでは両方ともNULLでなければならない場合は、クエリはより複雑になりますが、私はあなたがそれを理解すると思います。

関連する問題