2017-09-01 1 views
0

Okay, ich weiß, dass es möglich ist, count und inner join in einer Abfrage zu verwenden, aber ich weiß nicht, ob das was ich will, möglich ist.Ist es möglich COUNT und INNER JOIN in einer Abfrage wie dieser zu verwenden

Ich habe dies:

$queryA = "SELECT 
     answer.a_id, 
     answer.answer, 
     answer.timestamp, 
     answer.m_id, 
     member.m_id, 
     member.first_name, 
     member.middle_name, 
     member.last_name, 
     member.picture 
      FROM 
     answers AS answer 
      INNER JOIN 
     members AS member ON answer.m_id = member.m_id 
      WHERE q_id = '".$q_id."' 
      ORDER BY a_id DESC 
    "; 
    $resultA = $con->query($queryA) or die(mysqli_error($con)); 
    while ($rowA = $resultA->fetch_assoc()) { 
     ...my code... 
    } 

Ich versuche, ein bisschen ein Forum zu machen und diese mir die Antwort und das Element zu geben, der die Antwort geschrieben. Ich habe ein Skript gemacht, das es ermöglicht, die Antwort zu verbessern (AJAX). Wenn jemand eine Antwort ein Datensatz upvotes in einer anderen Tabelle wie folgt erstellt:

enter image description here

Dies ist, wie ich controle die upvote die Antwort und wann.

Ich könnte einfach eine andere Abfrage für jede Antwort, die überprüft, ob ein Datensatz, mit der Mitglieder-ID, ID und Frage ID bereits existiert. Dies bedeutet, dass bei 50 Antworten weitere 50 Anrufe von der Datenbank ausgehen. Ich will das nicht. Ist es möglich, dies in die obige Abfrage aufzunehmen?

Danach würde Ich mag Lage sein, so etwas zu machen:

if($rowA['counted'] > 0) { 
    ...show this.. 
} 
else { 
    ... or this 
} 

Danke.

+0

Könnten Sie Fügen Sie Ihre Tabellen (answer & member) in SQLFiddle hinzu? So können wir die gleiche Abfrage wie Sie ausführen und eine Online-Demo mit Beispieldaten haben. http://sqlfiddle.com –

Antwort

0

finden, wenn ein bestimmtes Mitglied upvoted hat, in den SELECT:

(SELECT COUNT(*) FROM votes v WHERE 
     v.m_id = [current_member.id] AND 
     v.a_id = answer.a_id AND 
     v.q_id = q_id) as has_voted 

finden die Anzahl der Mitgliedsunspezifischen Stimmen: wie oben, aber lassen Sie die m_id aus:

(SELECT COUNT(*) FROM votes v WHERE 
     v.a_id = answer.a_id AND 
     v.q_id = q_id) as count_voted