Problème qur requete mysql

Résolu/Fermé
fleurvar83 - 13 oct. 2008 à 11:00
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009 - 13 oct. 2008 à 17:00
Bonjour,

Si vous pouviez m'aider sur ma requete.

SELECT *
FROM mes tables
WHERE condition1 and condition2 and ((condition3) OR (condition4) OR ( condition5))

J'ai créa une méta condition entre parenthèse. mais le résultat prend les condition 3 et 4 et 5, alors que je veux qu'il prenne l'une des conditions (3 ou 4 ou 5) passé dans mon url.

Le OR n'est pas prit en compte et est remplacé par "et".

Merci pour votre aide.
sophie

40 réponses

Bonjour

Le OR n'est pas prit en compte et est remplacé par "et".
ça m'étonnerait beaucoup... Je pense plutôt que tu as programmé quelque chose qui revient à un ET. Peux-tu donner un peu plus de détails de ton script ?
0
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 11:19
Bonjour,

Merci pour ton aide. coici ma requete faite dans dreamweaver:

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

$baccarat_ANNUACASINO = "1";
if (isset($_GET['Baccarat_2'])) {
$baccarat_ANNUACASINO = $_GET['Baccarat_2'];
}
$Bingo_ANNUACASINO = "1";
if (isset($_GET['Bingo_5'])) {
$Bingo_ANNUACASINO = $_GET['Bingo_5'];
}
$blackjack_ANNUACASINO = "1";
if (isset($_GET['Blackjack_4'])) {
$blackjack_ANNUACASINO = $_GET['Blackjack_4'];
}
$backgamon_ANNUACASINO = "1";
if (isset($_GET['Backgammon_3'])) {
$backgamon_ANNUACASINO = $_GET['Backgammon_3'];
}
mysql_select_db($database_sophietest, $sophietest);
$query_ANNUACASINO = sprintf("SELECT * FROM detail_casino, jeux , devise, langue WHERE detail_casino.IdCasino=jeux.CasinoId and detail_casino.IdCasino=devise.CasinoId and detail_casino.IdCasino=langue.CasinoId and ((%s=Baccarat_2) OR (%s=Backgammon_3) OR ( %s=Blackjack_4) OR ( %s=Bingo_5))", GetSQLValueString($baccarat_ANNUACASINO, "int"),GetSQLValueString($backgamon_ANNUACASINO, "int"),GetSQLValueString($blackjack_ANNUACASINO, "int"),GetSQLValueString($Bingo_ANNUACASINO, "int"));


SELECT *
FROM detail_casino, jeux , devise, langue
WHERE detail_casino.IdCasino=jeux.CasinoId and detail_casino.IdCasino=devise.CasinoId and detail_casino.IdCasino=langue.CasinoId and ((baccarat=Baccarat_2) OR (backgamon=Backgammon_3) OR ( blackjack=Blackjack_4) OR ( Bingo=Bingo_5))

merci beaucoup pour ta réponse
sophie
0
La reqête a l'air irréprochable.

J'en viens a me demander s'il n'y aurait pas une confusion entre le ET et le OU dans ton esprit. (Ne le prends pas mal, j'ai déjà vu ça)
C'est normal avec le OU que ta requête sorte tous les enregistrements pour lesquels (baccarat=Baccarat_2) ET ceux pour lesquels (backgamon=Backgammon_3) ET ceux pour lesquels ( Bingo=Bingo_5)

Autre possibilité : les trois conditions ne seraient-elles pas toujous présentes ou absentes simultanément ? Dans ce cas, un Et et un OU donnent le même résultat.
0
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 11:49
Non, les 3 conditions seront toujours absentes. Ce sera toujours l'une d'entre elles et jamais plusieurs en même temps.

Car la variable sera passé dans l'url de mon lien.
(exemple: http://localhost/PROJET_CASINO/ANNU_CASINO/annuaire_casinos_jeux.php?Backgammon_3=1)
lien 2 :
http://localhost/PROJET_CASINO/ANNU_CASINO/annuaire_casinos_jeux.php?Baccarat_2=1

As tu une astuce afin d'afficher qu'un condition?

merci pour ton aide
sophie
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 14:22
tu n'as pas la solution.

sophie
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
13 oct. 2008 à 14:26
Bonjour,

Tiens une personne de Hyères, coucou ^^

Bref.... Les liens ne fonctionnent pas?!
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
13 oct. 2008 à 14:30
Hummm, question bête.... pour donner des exemples, avec des liens qui pointent sur le localhost... Je vois pas comment l'on peut vérifier cela ;-)

La requête a l'air bonne en effet. Je check plus en détails.

Edit : ce ne sont pas des exemples pardon..... autant pour moi, je lirais plus attentivement la prochaine fois.
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
13 oct. 2008 à 14:41
SELECT *
FROM detail_casino, jeux , devise, langue
WHERE detail_casino.IdCasino=jeux.CasinoId and detail_casino.IdCasino=devise.CasinoId and detail_casino.IdCasino=langue.CasinoId and ((baccarat=Baccarat_2) OR (backgamon=Backgammon_3) OR ( blackjack=Blackjack_4) OR ( Bingo=Bingo_5))


baccarat, backgamon, blackjack ou bingo sont des champs de la table jeux?
0
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 14:50
Bonjour,

Oui ce sont les champs de la table jeux

sophie
0
Pourquoi dis-tu que la requête fait un ET entre tes 3 comparaisons ?
Peux-tu nous donner un exemple précis de ligne de ta base de données qui remplit le OU entre les conditions sans remplir le ET, et qui n'est pas détectée par ta requête ?
0
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 14:59
Pourquoi dis-tu que la requête fait un ET entre tes 3 comparaisons ? Peux-tu nous donner un exemple précis de ligne de ta base de données qui remplit le OU entre les conditions sans remplir le ET, et qui n'est pas détectée par ta requête ?

Exemple précis:

Bouton1 'baccarat' dirige vers le lien suivant:
http://localhost/PROJET_CASINO/ANNU_CASINO/annuaire_casinos_jeux.php?Baccarat_2=1

Bouton2 'bingo dirige vers le lien suivant:
http://localhost/PROJET_CASINO/ANNU_CASINO/annuaire_casinos_jeux.php?Bingo_5=1

Bouton2 'craps dirige vers le lien suivant:
http://localhost/PROJET_CASINO/ANNU_CASINO/annuaire_casinos_jeux.php?Craps_6=1
etc...

Et dans ma page .../annuaire_casinos_jeux.php
J'affiche les sites traitant du baccarat pour le bouton1 , les sites traitant traitant du Bingo pour le bouton2.

Donc dans ma requête, j'ai l'une des conditions passé par L URL mais jamais les 3 en même temps. et à l'heure actuelle ce m'affiche les site traitant du bingo, crpas et baccarat.

Tu comprends mieux maintenant?
J'attends ta réponse avec impatience
merci
sophie
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
13 oct. 2008 à 15:02
Tu as un exemple de MCD s'il te plait? surtout la table jeux.... Et quelques enregistrements avec s'il te plait.

Je pense avoir compris le problème.
0
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 15:12
que veut dire MCD?
0
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 15:15
en fait je veux simplement que mon résultat affiche uniquement la variable passée en URL et le résultat que prend en compte toute les variables.

Le problème doit dorcément venir de ma requete: ce fameux OR!!
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
13 oct. 2008 à 15:20
Et bien en fait je ne pense pas qu'elle vienne de ta requête justement, ta requête est (enfin semble) correct mais je peux me tromper. Le problème c'est, (je pense) que toutes les conditions sont remplies, et du coup éxécutées, donc viendrait du code juste au dessus de ta requête.

Un MCD est un modèle conceptuel de données, la structure de ta base de données si tu préfères.
Celle de la table jeux avec ses enregistrements serait sympa et permettrait d'y voir plus clair :)
0
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 15:23
Avant la requete, il y a:

$baccarat_ANNUACASINO = "1";
if (isset($_GET['Baccarat_2'])) {
$baccarat_ANNUACASINO = $_GET['Baccarat_2'];
}
$Bingo_ANNUACASINO = "1";
if (isset($_GET['Bingo_5'])) {
$Bingo_ANNUACASINO = $_GET['Bingo_5'];
}
$blackjack_ANNUACASINO = "1";
if (isset($_GET['Blackjack_4'])) {
$blackjack_ANNUACASINO = $_GET['Blackjack_4'];
}
$backgamon_ANNUACASINO = "1";
if (isset($_GET['Backgammon_3'])) {
$backgamon_ANNUACASINO = $_GET['Backgammon_3'];
}
mysql_select_db($database_sophietest, $sophietest);
$query_ANNUACASINO = sprintf("SELECT * FROM detail_casino, jeux , devise, langue WHERE detail_casino.IdCasino=jeux.CasinoId and detail_casino.IdCasino=devise.CasinoId and detail_casino.IdCasino=langue.CasinoId and ((%s=Baccarat_2) OR (%s=Backgammon_3) OR ( %s=Blackjack_4) OR ( %s=Bingo_5))", GetSQLValueString($baccarat_ANNUACASINO, "int"),GetSQLValueString($backgamon_ANNUACASINO, "int"),GetSQLValueString($blackjack_ANNUACASINO, "int"),GetSQLValueString($Bingo_ANNUACASINO, "int"));


Cela t'aide?
0
papymucho Messages postés 140 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 1 novembre 2009 220
13 oct. 2008 à 15:29
Oui ça j'ai vu ce qu'il y avait avant la requête, tu l'as posté précédemment :)

Non un MCD ça ressemble plus a un truc comme ça : https://forums.commentcamarche.net/forum/affich-37622101-merise-modele-conceptuel-des-donnees
Comment tu as défini la structure de ta table JEUX, avec les champs, leur typage etc.

Si tu n'en a pas c'est pas grave.

Je dois venir en aide à un utilisateur, je reviens dans une demi-heure, si toto trouve la réponse entre temps, tant mieux :)
0
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 15:31
non je n'en ai pas.

ok je t'attends et toto aussi
sophie
0
sophievar83hyeres Messages postés 41 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 17 juin 2009
13 oct. 2008 à 15:35
si on ne trouve pas la solution, la seule chose à faire serai de créer 20 pages avec 20 requetes différentes (1 requete sur chaque page): 1 pour bingo, 1 pour Craps etc....

mais c'est ingérable
0
Donc dans ma requête, j'ai l'une des conditions passé par L URL mais jamais les 3 en même temps. et à l'heure actuelle ce m'affiche les site traitant du bingo, crpas et baccarat.

Bien sûr que ça te les affiche tous !

dans ton script, tu forces à 1 des valeurs qu'en fait tu voudrais ignorer . Le champ correspondant est à 1 dans ta base. En faisant un OU entre les conditions, tu affiches toujours tout.
On en revient à mon message 3 : tu confonds ET et le OU

$Bingo_ANNUACASINO = 0;
if (isset($_GET['Bingo_5'])) {
$Bingo_ANNUACASINO = $_GET['Bingo_5'];
}
$blackjack_ANNUACASINO = 0;
if (isset($_GET['Blackjack_4'])) {
$blackjack_ANNUACASINO = $_GET['Blackjack_4'];
}
$backgamon_ANNUACASINO = 0;
if (isset($_GET['Backgammon_3'])) {
$backgamon_ANNUACASINO = $_GET['Backgammon_3'];
}

ça devrait mieux marcher
0