Ich habe drei Tabellen, die ich beitreten. submissions
, submissions_votes
und users
.Erhalten Gesamtanzahl von Zählen, wenn Benutzer gewählt
Ich möchte herausfinden, wie viele insgesamt hilfreichVotes gibt es (das ist eine Summe der Anzahl aller submissions_votes
) und ich habe das.
Ich möchte auch eine Zählung (boolean, eher) von 0 oder 1, wenn die user_id
von sv.user_id
bezieht sich auf die Einreichung wird angezeigt. Die user_id
wird an die WHERE
Klausel übergeben.
SELECT s.*,
u.username,
u.photo as userPhoto,
COALESCE(SUM(sv.up), 0) helpfulVotes
FROM
submissions s
LEFT JOIN submissions_votes sv on s.id = sv.submission_id WHERE u.id = ?
INNER JOIN users u
ON s.user_id = u.id
Ich weiß, dass ich eine zusätzliche anschließen müssen (auf sv.user_id = u.id
), aber was würde ich wählen? Dann würde ich nach sv.id
gruppieren?
Edit:
users
Tabelle:
+----------------+------------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------+------+-----+-------------------+-----------------------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| email | varchar(128) | NO | MUL | NULL | |
| username | varchar(23) | NO | | NULL | |
| type | enum('normal','admin') | NO | | normal | |
| about | varchar(255) | NO | | NULL | |
| photo | varchar(32) | NO | | NULL | |
+----------------+------------------------+------+-----+-------------------+-----------------------------+
submissions_votes
Tabelle:
+---------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| submission_id | int(10) unsigned | NO | MUL | NULL | |
| when | datetime | NO | | NULL | |
| user_id | int(10) unsigned | NO | MUL | NULL | |
| up | tinyint(3) unsigned | NO | | NULL | |
| down | tinyint(3) unsigned | NO | | NULL | |
+---------------+---------------------+------+-----+---------+----------------+
submissions
Tabelle:
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | MUL | NULL | |
| slug | varchar(255) | NO | | NULL | |
| description | mediumtext | NO | | NULL | |
| user_id | int(11) | NO | MUL | NULL | |
| created | datetime | NO | | NULL | |
| type | enum('tip','request') | NO | | NULL | |
| thumbnail | varchar(64) | YES | | NULL | |
| removed | tinyint(1) unsigned | NO | | 0 | |
| keywords | varchar(255) | NO | | NULL | |
| ip | int(10) unsigned | NO | | NULL | |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+---------+----------------+
bieten Sie Ihre Tabellenstruktur, um Sie weiter zu unterstützen. Wir machen einige Annahmen und wenn das nicht zu Ihrem Strukturcode passt, ist das nicht sinnvoll. – Murtaza
Um die Stimmen jeder Einreichung zu zählen, müssen Sie die Tabelle der Stimmen unbedingt nach Einreichung gruppieren; Aber dadurch wird es bedeutungslos, auf die (die 'user_id' von) * der * Stimme zu verweisen, die mit dieser Einreichung verbunden ist: es könnte sehr viele geben. Daher müssen Sie Ihr Problem besser definieren, was oft am einfachsten mit einem anschaulichen Beispiel für Tabelleninhalte und gewünschte Ergebnisse geschieht. Man könnte vermuten, dass der Boolesche Wert anzeigen soll, ob mindestens eine der Stimmen vom Eigentümer der Vorlage abgegeben wurde, aber das ist überhaupt nicht klar aus Ihrer Frage. – eggyal
@bob_cobb: Die Aussage als sieht für mich falsch aus. Sie fassen alle Upvotes der Einreichungen eines Benutzers zusammen und zeigen dann den Benutzer und einen zufälligen Einreichungsdatensatz an. Das ist sicherlich nicht das, was du willst, oder? –