MySQL requête select avec plusieurs conditions
J'ai écrit une requête MySQL, mais il ne semble pas fonctionner, parce que le résultat est vide. Est-il une erreur dans mon code?
$result = mysql_query(
"SELECT user_id
FROM wp_usermeta
WHERE
(meta_key = 'first_name' AND meta_value = '$us_name') AND
(meta_key = 'yearofpassing' AND meta_value = '$us_yearselect') AND
(meta_key = 'u_city' AND meta_value = '$us_reg') AND
(meta_key = 'us_course' AND meta_value = '$us_course')"
);
- Comment vous attendez-vous la même colonne (
meta_key
) pour plusieurs valeurs en même temps? s'il vous Plaît, n'utilisez pasmysql_*
fonctions dans le nouveau code. Il n'est plus maintenu et sont officiellement obsolète. Voir le boîte rouge? En savoir sur le les instructions préparées au lieu de cela, et d'utiliser les PDO ou MySQLi - cet article vous aider à décider lequel. Si vous choisissez AOP, voici un bon tutoriel.
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser cette requête:
cela va sélectionner tous les
user_id
que se réunit tous les quatre conditions.@fthiella 's solution est très élégant.
À l'avenir si vous voulez montrer plus de
user_id
vous pouvez utiliser les jointures, et il y a une ligne pourrait être de toutes les données dont vous avez besoin.Si vous souhaitez utiliser
AND
conditions, et que les conditions dans plusieurs lignes de votre tableau, vous pouvez utiliserJOINS
exemple:Autre chose: il est recommandé d'utiliser des requêtes préparées, parce que
mysql_*
des fonctions n'est pas d'injection SQL enregistrer, et sera obsolète.Si vous voulez changer votre code le moins possible, vous pouvez utiliser
mysqli_
fonctions:http://php.net/manual/en/book.mysqli.php
Recommandation:
Utilisation des index dans cette table.
user_id
vous recommandons fortement d'être et l'index, et de recommander à lameta_key
ETmeta_value
trop, pour accélérer l'exécution de la requête.L'expliquer:
Si vous utilisez
AND
vous "connecter" les conditions pour une seule ligne. Donc, si vous le souhaitez ET de l'état de plusieurs lignes, vous devez d'abord créer une ligne à partir de plusieurs lignes, comme ça.Tests:
Les Données De La Table:
Le résultat de la Requête avec
$us_name='Kovge'
$us_yearselect='2012'
$us_reg='GaPa'
,$us_course='PHP'
:Donc il devrait fonctionner.
SELECT w_name.meta_value as name, w_year.meta_value as year, w_city.meta_value as city, w_course.meta_value as course
Si cela retourne un résultat vide. Il pourrait y avoir des problèmes avecmeta_key
noms$result = mysql_query(/*the query*/) or die(mysql_error());
Mais quand votre code à exécuter dans la production envirolment, commenter ou supprimer ces changements.meta_key
noms, et vous êtes substitué correctement les variables ?vous pouvez aussi utiliser "ET" au lieu de "OU" si vous voulez que les deux attributs à appliquer.
Vous avez des conditions qui sont mutuellement exclusives, si meta_key est 'prenom', il ne peut pas être également "yearofpassing'. Très probablement, vous ont besoin de vous ET de l'être OU de l':
user_id
que a quatre metas. Qui exigera uneINNER JOIN
pour chaque condition. (Cette structure de la table est connu comme Entité-Attribut-Valeur, ou de VAE.)