Problème qur requete mysql

Résolu
fleurvar83 -  
sophievar83hyeres Messages postés 41 Date d'inscription   Statut Membre Dernière intervention   -
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

toto
 
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   Statut Membre Dernière intervention  
 
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
toto
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
tu n'as pas la solution.

sophie
0
papymucho Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   220
 
Bonjour,

Tiens une personne de Hyères, coucou ^^

Bref.... Les liens ne fonctionnent pas?!
0
papymucho Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   220
 
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   Statut Membre Dernière intervention   220
 
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   Statut Membre Dernière intervention  
 
Bonjour,

Oui ce sont les champs de la table jeux

sophie
0
toto
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   220
 
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   Statut Membre Dernière intervention  
 
que veut dire MCD?
0
sophievar83hyeres Messages postés 41 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   220
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   220
 
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   Statut Membre Dernière intervention  
 
non je n'en ai pas.

ok je t'attends et toto aussi
sophie
0
sophievar83hyeres Messages postés 41 Date d'inscription   Statut Membre Dernière intervention  
 
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
toto
 
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