Bonjour MySQL et SQL Experts
J'ai un problème avec ma requête. P>
J'ai 3 tables (comme vous pouvez le voir dans les images ci-dessous) p>
une table pour l'événement Une table pour le compte d'utilisateur Et une table où la table d'événements et la table de compte d'utilisateur sont liées à (Table Teilnehmer) P>
Lorsqu'un utilisateur vous inscrit à un événement, l'EFFECT et l'ID utilisateur sera stocké dans la table Teilnmer. p>
qui fonctionne bien. p>
Maintenant, le problème est que j'ai créé une requête qui devrait seulement renvoyer les événements, qui sont activés = 1, l'utilisateur ne s'est pas inscrit à la Le nombre de fk_eventid est mais cela ne fonctionne pas. P> Le comte et activé JOI fonctionne, mais bien que l'utilisateur s'inscrit dans un événement, l'événement sera toujours Soyez retourné P> Quelqu'un peut-il voir mon problème? p>
[
] [
] 3
p> p>
5 Réponses :
Vous devez utiliser une jointure extérieure afin d'inclure des événements n'ayant pas d'utilisateur associé sur le côté droit, puis ajoutez la condition que user_id est null. p>
Vous devez ajouter une condition qui me donne tous ces événements que Vous manquez cette condition dans votre requête p> La requête complète doit être , p> Vous ne devez pas le faire, p> activé code> mais que l'utilisateur n'est pas inscrit pour cela comme suit. Autoriser également rejoindre code> pour se produire sous sa forme la plus pure, comme décrit ci-dessous. left join Users as u on t.FK_userID=u.ID where v.Enabled=1 and u.ID = 17
Merci pour votre réponse, mais le problème est que je souhaite montrer tous les événements que l'utilisateur ne vous signera pas. Avec votre requête, cela me montre les événements que l'utilisateur se connecte à
@ Stefanröthlisberger J'ai mis à jour ma réponse. S'il vous plaît essayez la requête mise à jour
Merci de votre aide, mais le problème est toujours le même, cela me montre les événements que l'utilisateur a signé et non les événements que l'utilisateur ne s'est pas inscrit. J'ai téléchargé l'exportation de la DB sur OneDrive, vous pouvez peut-être essayer votre requête et voir pourquoi il ne fonctionne pas 1drv.ms/u/s!AISM5-_HN06SGYQKRBWYWR75OJLAYW
@ Stefanröthlisberger Je pense que vous devez utiliser la sous-requête à la place. J'ai mis à jour ma réponse avec sous-requête et non en opérateur.
Je considérerais une sous-requête corrélée au lieu des jointures gauche:
De ce que je peux dire à la requête, vous n'avez pas besoin de référencer la table code> code>. Donc, je pense que vous voulez que ce J'écrirais la requête entière comme: p> de la clause code>:
Merci pour votre requête, mais le problème est que je souhaite montrer tous les événements que l'utilisateur ne s'inscrit pas. Avec cette requête, cela me montre tous les événements (que l'utilisateur s'inscrit à et qui non)
Je peux résoudre votre problème.
J'utilise des sous-requêtes pour votre "problème" p>
Utilisez ce code P>
SELECT
v.ID, v.NameVeranstaltung, v.Datum, v.Uhrzeit, v.Anzahl, v.Beschreibung, v.Enabled
FROM
Veranstaltung as v
WHERE
v.Enabled=1 and
not exists
(
SELECT 1
FROM Teilnehmer as t
WHERE t.FK_eventID=v.ID and t.FK_userID = '$uid'
)
and v.Anzahl >
(
SELECT count(*)
FROM Teilnehmer as t
WHERE t.FK_eventID=v.ID
);
La plupart des gens ici veulent des données de table d'échantillons et un résultat attendu sous forme de texte formaté, pas comme des images.
Vous collaborez généralement par les mêmes colonnes que vous sélectionnez, à l'exception de ceux qui sont des arguments pour définir des fonctions.
Postez les tables et les données comme texte Lisez ce . Et la plupart des gens ici ne parlent pas allemand
Montrez-nous le schéma DB, les échantillons de données, la sortie actuelle et attendue. Veuillez lire Comment à poser b> et voici un endroit idéal pour Démarrer B> pour savoir comment améliorer la qualité de votre question et obtenir de meilleures réponses. Comment créer un exemple minimal, complet et vérifiable b> essayez de créer un échantillon dans rexester.com