SQL select dans les jointures internes
Ma question est: Comment obtenir des valeurs différentes dans une requête sql? Je suis en train d'essayer ceci:
SELECT
q.id,
q.question_title,
SUM(op.option_value) AS total_votes,
COUNT(op.option_value) AS number_votes,
tab.comments
FROM
questions_options AS op
INNER JOIN questions AS q
ON (q.id = op.q_id)
INNER JOIN
(SELECT
SUM(p.unseen) AS comments
FROM
questions_options AS p) tab
ON (q.id = tab.q_id)
WHERE op.option_value > 0
GROUP BY q.question_title
Cette requête fonctionne parfaitement, Si je supprime le milieu "INNER JOIN" (j'.e me montre l'id, question de titre, la somme du total des voix de notation, et le nombre de votes....
Mais je veux montrer l'invisible commentaires aussi, ce qui est un autre champ dans la table et prend un "1" pour invisible (non lus) commentaire...
Alors, comment puis-je le faire en mettant invisible commentaires nombre....toute idée ou suggestion...
- vous avez éliminé les q_id de champ à partir de votre sous-requête nommée "onglet", alors, évidemment, vous ne pouvez pas vous rejoindre sur ce terrain plus. Vous voulez probablement
(select sum(p.unseen), p.q_id from questions_options as p group by q_id) tab
- salut....oui vous avez raison..c'est montrer un résultat...mais 2 pour tous les champs, je veux seulement que pour les domaines qui ont de l'onu-lire les commentaires...merci
Vous devez vous connecter pour publier un commentaire.
Je pense que le Juge Mentale est à droite.
Vous devez SÉLECTIONNER le "q_id" dans votre sous-requête pour être en mesure de faire une jointure interne à "onglet.q_id".
-Explication-
Votre premier
INNER JOIN
ressemble à ceci:SELECT * FROM questions_options AS op INNER JOIN questions AS q ON (q.id = op.q_id)
..donc, fondamentalement, la relation (et de jointure entre deux tables est basé sur
questions.id
etquestions_options.q_id
.Bien, c'est la même histoire pour vous sous-requête.
Dans votre sous-requête, vous définissez une instruction SELECT à PARTIR de "questions_options",
qui ne retourne que les colonnes/champs vous mettre après votre SÉLECTION.
(SELECT SUM(p.unseen) AS comments FROM questions_options AS p) tab
Pour être en mesure d'utiliser toutes les données auprès de vous sous-requête, vous devrez
SELECT
l'questions_options.q_id
champ et de faire une jointure avec laquestions.id
champ déjàdans votre requête principale.
(SELECT p.q_id, SUM(p.unseen) AS comments FROM questions_options AS p) tab
INNER JOIN (...subquery...) ON (q.id = tab.q_id)
Donc
tab.q_id
se réfère à lap.q_id
vous avez sélectionnés dans votre sous-requête.Je ne sais pas si je suis correct, mais j'ai trouvé quelque chose ici.
Si u lire OP requête de nouveau et de nouveau, vous allez savoir qu'il n'y a pas besoin d'une deuxième jointure interne.
vous pouvez aussi mettre
sum(p.unseen) as comments
en premierselect
lui-même, comme c'est aussi demander de l'questions_options
table sur la base de q.id = tab.q_id, which by itself comes in the first inner join between
questionsand
questions_options`.Espérons qu'il vous aide.