Hai tre tavoli con cui mi sto iscrivendo. submissions
, submissions_votes
e users
.Ottieni il conteggio totale oltre al conteggio se l'utente ha votato
Voglio sapere quante offerte utili totali ci sono (che è una somma del conteggio di tutti submissions_votes
) e ce l'ho.
voglio anche restituire un conteggio (booleano, piuttosto) di 0 o 1 se l'user_id
di sv.user_id
riguarda la presentazione visualizzata. Lo user_id
viene passato alla clausola WHERE
.
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
so che ho bisogno di un ulteriore unisco (su sv.user_id = u.id
), ma cosa avrei scegliere? Quindi dovrei raggruppare per sv.id
?
Edit:
users
tavolo:
+----------------+------------------------+------+-----+-------------------+-----------------------------+
| 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
tavolo:
+---------------+---------------------+------+-----+---------+----------------+
| 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
tavolo:
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+---------+----------------+
| 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 | |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+---------+----------------+
fornire la struttura del tavolo, per aiutarvi ulteriormente. Stiamo facendo alcune ipotesi e se ciò non corrisponde al tuo codice di struttura non sarà utile. – Murtaza
Per poter contare i voti di ciascuna submission, è necessario raggruppare necessariamente la tabella dei voti per sottomissione; ma così facendo, diventa priva di senso riferirsi a (il "user_id' di) * il * voto associato a quella sottomissione: ce ne potrebbero essere molti. Quindi è necessario definire meglio il problema, cosa che spesso si fa più facilmente con un esempio illustrativo del contenuto della tabella e dei risultati desiderati. Si potrebbe azzardare un'ipotesi che il booleano dovrebbe indicare se almeno uno dei voti è stato preso dal proprietario della submission, ma ciò non è affatto chiaro dalla sua domanda. – eggyal
@bob_cobb: l'affermazione mi sembra sbagliata. Sommerai tutti gli upvotes degli invii di un utente, quindi visualizzerai l'utente e un record di invio casuale con esso. Questo non è certamente quello che vuoi, giusto? –