Voici mon scénario simplifié.
J'ai des enregistrements DB dans 'store_config' Tableau: Tous les enregistrements sont facultatifs - peuvent ou non exister. P> colonne STOP_ID est unique. P> Je veux exécuter une requête: p> de sorte que:
La requête doit renvoyer une valeur correspondant au magasin_id à partir du paramètre de requête si elle existe, sinon la valeur de retour correspondant à STORE_ID 0 s'il existe. P> STATED = 0 Enregistrement est considéré comme une valeur par défaut et renvoyé seulement s'il y a Il n'y a pas d'enregistrement existant pour la requête fournie de la requête de plomb. C'est la logique derrière elle. p> p>
3 Réponses :
Vous pouvez utiliser ceci suppose (comme impliqué par votre question) qu'il n'y a qu'un seul rangée dans la table pour chaque identifiant de magasin. Si ce n'est pas le cas, vous voudrez peut-être une version plus compliquée: p> commander par code> et limite code>:
Oui, il n'y a qu'un seul enregistrement par magasin_id, mais merci d'étendre votre réponse.
Je viens de comprendre que cela ne résout pas mon problème. Donc, si les deux enregistrements sont présents et que le paramètre est store_id = 10, je veux obtenir la valeur de ce magasin - pas sur la page. 0
S'il vous plaît voir la description de la question à nouveau, j'ai clarifié un peu plus
@MWDev Cela répond correctement à votre question, de même que ma réponse (plus ou moins).
@mwdev. . . C'est ce que font ces deux questions.
Ouais tu as raison - désolé les gars, j'ai été confus pendant une seconde. C'est correct! ;]
Voici une approche en utilisant un Limite Code> Trick: SELECT ID, store_id, `value`
FROM store_config
WHERE store_id IN (0, 10)
ORDER BY store_id DESC
LIMIT 1;
@mwdev. . . Je trouve qu'il est amusant que cela soit accepté et que cela a des upvotes étant donné qu'il utilise les mauvaises colonnes pour les comparaisons.
@Gordonlinoff Pour ce que ça vaut la peine, j'ai donné cette réponse sur un téléphone portable, tandis que sur un train métro bondé.
. . L'OP a accepté une réponse incorrecte postée après une réponse correcte. L'OP peut faire tout ce qu'il / elle veut. Je suis juste amusé par ça.
@Gordon Vous avez raison, une colonne erronée est une chose mais je viens de comprendre que cela ne résout pas mon problème. Donc, si les deux enregistrements sont présents et que le param est store_id = 10, je veux obtenir la valeur de ce magasin
@MWDev ma réponse doit en fait couvrir cette situation. Si store_id code> de 1 et 10 est présent, le dernier enregistrement secondaire serait conservé.
@mwdev. . . L'esprit de la réponse originale de Tim est correct (et il l'a réparé). Il vient de mettre dans les mauvaises colonnes - une erreur que je suis sûr que j'ai fait plusieurs fois et que je suis vraiment facile à faire sur de petits écrans.
Je sais que je lui ai donné un vote, désolé pour mes gars de confusion, je pouvais toujours choisir une seule réponse comme pour la fermeture du billet.
S'il vous plaît essayez ceci.
SELECT (IFNULL((SELECT store_id FROM @tbl Where id = @store_id LIMIT 1),0))
Je pense avoir eu l'idée ici, mais d'autres réponses sont plus élégantes et que les sous-requêtes sont ce que je voulais éviter. Merci.
Avez-vous essayé avec limite? Sélectionnez Store_ID à partir de la table où Store_ID = paramname limite 1?
Il peut y avoir d'autres enregistrements de plomb entre entre code> ... Il n'y a pas d'ordre interne à une table MySQL. Je dois être d'accord avec les commentaires ci-dessus; Ce n'est pas tout à fait clair ce que vous voulez faire ici.@Tim j'ai essayé de réécrire la description, est-ce assez clair maintenant?