0
votes

Comment combiner des rangées dans une table avec une condition de laravange

Je possède plusieurs tables et je les ai combinées à l'aide de "Join" ( Code donné ci-dessous ), je dispose maintenant d'une table combinée qui me donne un nombre correct de réponses pour un utilisateur particulier et pour un quiz particulier (donné ci-dessous):

 Entrez la description de l'image ici

Je veux Ajouter ou souhaiter montrer résultat combiné Pour le même utilisateur et quiz comme celui-ci (donné ci-dessous):

Entrez la description de l'image ici

Voici mon code lame: < Pré> xxx

Voici ma fonction de contrôleur: xxx

Quizzes Table: Entrez la description de l'image ici

réponses Table: Entrez la description de l'image ici

résultats Table: Entrez la description de l'image ici


3 commentaires

Pouvez-vous me montrer quelques données de la base de données


Ouais, j'ai ajouté 3 autres captures d'écran de tables, s'il vous plaît voir.


S'il vous plaît partager vos tentatives de débogage


3 Réponses :


0
votes

Essayez ce bro xxx


2 commentaires

Merci de répondre, mais il y a une erreur: illuminate \ base de données \ QueryException sqlstate [42000]: erreur de syntaxe ou violation d'accès: 1064 Vous avez une erreur dans votre syntaxe SQL;


désolé bro vous devriez supprimer les réponses dans SELECT i Mise à jour de la réponse Vérifiez-le bro



0
votes

Si je vois cela correctement, vous utilisez la variable "Quizzes.qname" dans la requête SELECT. Mais je ne vois que le nom dans la table des quizzes. Essayez ceci: xxx

}

Je l'ai réglé à nouveau après votre commentaire.


5 commentaires

Comme il y a plusieurs fenêtres ouvertes, j'avais prise de capture d'écran à partir de la mauvaise table de base de données, j'ai maintenant remplacé la table des questionnaires avec la bonne, s'il vous plaît voir. J'utilise QName dans le programme en réalité.


Monsieur, même résultat que plus tôt, rien ne s'est passé. J'ai remplacé ma fonction avec le vôtre.


Dernière tentative: je viens de remarquer que j'ai mal compris votre question. Vous devrez peut-être regrouper toutes les colonnes sauf le score. J'ai encore ajusté mon code et j'espère que cela fonctionne maintenant: D


Je pense que le groupeby ne correspond pas à cela


Pourquoi pas? Je ne peux pas le tester maintenant. C'est pourquoi je pensais que c'était mon dernier essai.



1
votes

requête SQL pour obtenir les résultats souhaités serait xxx

donc je suppose avec le constructeur de requêtes Laravel que la requête pourrait être écrite comme xxx

Cela devrait vous donner le résumé des données souhaité.

PS: Vérifiez et corrigez la syntaxe de Builder de Query Laravel pour Groupby, je ne suis pas sûr de cela.


11 commentaires

@Daljitsingh a mis à jour la réponse pour fournir une déclaration de constructeur SQL brut et équivalente de Query Laravel. Vérifiez si cela vous donne la sortie souhaitée


Non monsieur son ne fonctionne pas :-( ... voici l'erreur: illuminate \ base de données \ QueryException sqlstate [42000]: erreur de syntaxe ou violation d'accès: 1055 'QUIZMASTER.USERS.NAME' n'est pas en groupe par (SQL: Sélectionner Résultats.Quision.Id comme quizid, résultats.user_id comme userid, users.nom comme nominame, Quizzes.qname comme QuizName, Quizzes.Id comme quizid, comptez (réponses.is_correction) comme score à partir de Résultats Join Inner < Code> Utilisateurs sur résultats . user_id = utilisateurs . ID joint interne quiz < / code> sur résultats . quiz_id = quiz . id joint interne réponses sur résultats . réponse_id = réponses . id groupe par résultats . Quiz_id


S'il vous plaît aidez-moi .. @ donkarnash


@Daljitsingh pls examine la requête SQL brute et la relevé de base de la requête que j'ai posté incluent les résultats .Quiz_ID ainsi que résultats.User_id dans le groupe par. L'erreur indique que résultats.user_id est manquant (non inclus) dans la Grosseby - C'est pourquoi vous obtenez l'erreur. Pls essayer la déclaration fournie et laissez-moi savoir


@DalJitsingh pour la sortie que vous désirez, MySQL a besoin de regrouper les enregistrements des résultats d'un quiz (Résultats.Quz_ID) en outre pour calculer le score de chaque utilisateur, MySQL doit être club (agrégat) les valeurs de is_correct Pour chaque utilisateur, c'est-à-dire que MySQL a besoin de grouper les enregistrements d'abord par résultats.Quiz_ID , puis par résultats.User_id . Vous avez donc besoin des deux dans la clause de groupeby. J'espère que cela devient clair maintenant.


Je ne vois aucune raison pour laquelle ce qui précède ne devrait pas fonctionner et vous donner la sortie souhaitée. Cependant, si cela ne fonctionne toujours pas pour vous, PLS Post le schéma (structure de la table) SQL.


@Daljitsingh a-t-il fonctionné pour vous? Puisque vous n'avez pas répondu d'erreurs, je suppose qu'il a fonctionné


Non monsieur, il ne fonctionne pas. Comme je suis hors de la ville, c'est pourquoi n'a pas pu répondre. 🙏


Quelle est l'erreur que vous obtenez? Pouvez-vous s'il vous plaît poster le SQL du schéma de la table?


ERREUR: Illuminate \ Database \ QueryException SQLState [42000]: Erreur de syntaxe ou violation d'accès: 1055 'QuizMaster.USers.name' N'est pas en groupe par (SQL: Sélectionner des résultats.Quz_id comme un quizid, résultats.Auzid_id comme userid, utilisateurs. Nom comme nom d'utilisateur, Quizzes.Qname En tant que QuizName, Quizzes.Id en tant que quizid, comptez (réponses.is_correct) comme score à partir de résultats interne rejoindre les utilisateurs sur les résultats.User_id = users.Id Inner Rejoignez quiz sur les résultats.Quiz_id = Quizzes.ID Réponses sur les résultats.Aswer_id = réponses.ID Groupe par résultats.Quiz_ID


À partir de l'erreur, il semble que vous n'utilisez toujours que les résultats .Quiz_id dans groupby et non compris résultats.user_id . Pls poster la déclaration complète de la requête et Schema SQL pour que je puisse comprendre où l'erreur se produit.