8
votes

Alternative à "dans" qui fonctionne comme "et" au lieu de "ou"

De ma compréhension, dans des œuvres telles que ceci: xxx

est l'équivalent de: xxx

Je me demande s'il y a une Fonction SQL qui fonctionne comme dans, mais utilise et à la place de ou pour comparer à un tableau. Quelque chose qui élargirait à ceci: xxx

pas que ce soit nécessaire, mais pour le contexte, je crée simplement une liste de tri pour certains résultats de recherche qui sont peuplés sur une page PHP via jQuery. Je peux faire ce dont j'ai besoin avec PHP, je vais simplement créer la requête de manière dynamique en fonction des options sélectionnées par l'utilisateur, mais je préfère utiliser une fonction SQL intelligente si possible.

*** EDIT : Merci à tous pour l'aide. J'ai expliqué mon problème très mal et vous avez toujours pu le résoudre, ce que j'apprécie. J'ai constaté que quelqu'un d'autre avait posé cette question plus éloquemment et a reçu une réponse que je peux utiliser:

Y a-t-il quelque chose dans MySQL comme dans, mais qui utilise et au lieu de ou?

J'essaie de comprendre comment accepter une réponse et fermer cela, mais j'ai un peu de problèmes ...


7 commentaires

ProductID ne peut pas être 1,2 et 3 en une seule ligne. Je comprends ce que tu veux cependant. Vous avez besoin d'un Divison relationnelle Query.


Cette requête n'a pas de sens, d'accord avec @martinsmith


Si vous faites $ arrayname = tableau (1, 2, 3); , puis "" Sélectionnez * à partir du nom de TableDId dans ($ ArrayName) "; dans php, qui semble La langue utilisée, vous obtiendriez la requête "Sélectionnez * dans le nom de Tableau dans lequel Producteur In (Array)";


Dupliquer possible Stackoverflow.com/Questtions/4751361/...


en double possible de est Il y a quelque chose dans MySQL comme dans, mais qui utilise et au lieu de ou?


@Bidbits Cliquez sur la coche sous la bonne réponse (à gauche où le grand numéro est avec deux flèches)


Merci, je l'ai eu, limite-moi de en choisir un pendant une certaine période. Je suis émerveillé à la rapidité avec laquelle tout le monde a répondu, très impressionné.


3 Réponses :


3
votes

Vous ne pouvez pas éventuellement faire cela, xxx

la condition retourne toujours faux car une ligne ne peut avoir qu'une seule valeur sur sa colonne, la voie alternative de faire ceci est en regroupant le résultat, ex. xxx

en ayant une condition ayant compté (colname distinct) = 3 , cela signifie que l'instance de Un enregistrement doit être égal au nombre total de paramètres fournis sur dans la clause .


4 commentaires

Bonjour tout le monde, merci beaucoup pour la réponse rapide. Il n'y a pas de problème avec le code que j'utilise, je suis juste un idiot pour expliquer les choses. J'ai trouvé une autre question était une autre question posée / répondit mieux que je pouvais: Stackoverflow.com/questions/2860374/...


Vous auriez besoin de compter (produit distinct)


@Martinsmith c'est aussi correct si le nom de Tableau permet de faire dupliquer le produit produit dont la clé primaire est incrémentée automatique. En fait, cela dépend toujours de chaque situation. Quoi qu'il en soit, merci pour le commentaire.Much apprécié :)


Il existe deux façons de mettre en œuvre une division relationnelle, l'une est la réponse ci-dessus et l'autre via Joinines, qui est expliquée ici . Selon Ce test présenté ici , la mise en œuvre de la participation a une meilleure performance et est la plus rapide des deux implémentations.



3
votes

Comme écrit, votre requête ne produira aucune lignée. Il n'est pas possible que la productide dans une rangée soit égale à 1 et 2 en même temps.

Vous recherchez probablement un groupe des lignes contenant ces trois produits. Dites que vous voulez trouver des commandes qui ont tous les trois produits. Vous pouvez utiliser quelque chose comme: xxx

Le groupe en passant par la clause trouvera des commandes où les trois produits sont présents.


0 commentaires

2
votes
SELECT orderid 
FROM tableName  
WHERE productID IN (1, 2, 3)
GROUP BY orderid
HAVING COUNT(DISTINCT productID) = 3 --this number must match the number of unique IDs in the IN clause

0 commentaires