Problème qur requete mysql

Résolu
fleurvar83 -  
sophievar83hyeres Messages postés 42 Statut Membre -
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
Configuration: Windows XP
Internet Explorer 7.0

40 réponses

  • 1
  • 2
Résumé de la discussion

Une requête SQL contenant WHERE condition1 et condition2 et ((condition3) ou (condition4) ou (condition5)) vise à ne prendre qu'une seule des conditions 3, 4 ou 5 selon le paramètre transmis dans l’URL. Plusieurs réponses indiquent que l’OU devrait fonctionner comme tel et que le problème provient souvent d’un calcul ou d’une initialisation des variables, avec des exemples évoquant une valeur par défaut bloquante. En cas de doute, les échanges suggèrent d’expliciter l’exemple, d’exporter un échantillon de données et de vérifier que chaque paramètre actif applique uniquement sa condition associée afin d’isoler l’erreur.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. 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
  2. sophievar83hyeres Messages postés 42 Statut Membre
     
    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
  3. 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
  4. sophievar83hyeres Messages postés 42 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sophievar83hyeres Messages postés 42 Statut Membre
     
    tu n'as pas la solution.

    sophie
    0
  7. papymucho Messages postés 146 Statut Membre 220
     
    Bonjour,

    Tiens une personne de Hyères, coucou ^^

    Bref.... Les liens ne fonctionnent pas?!
    0
  8. papymucho Messages postés 146 Statut Membre 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
  9. papymucho Messages postés 146 Statut Membre 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
  10. sophievar83hyeres Messages postés 42 Statut Membre
     
    Bonjour,

    Oui ce sont les champs de la table jeux

    sophie
    0
  11. 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
  12. sophievar83hyeres Messages postés 42 Statut Membre
     
    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
  13. papymucho Messages postés 146 Statut Membre 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
  14. sophievar83hyeres Messages postés 42 Statut Membre
     
    que veut dire MCD?
    0
  15. sophievar83hyeres Messages postés 42 Statut Membre
     
    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
  16. papymucho Messages postés 146 Statut Membre 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
  17. sophievar83hyeres Messages postés 42 Statut Membre
     
    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
  18. papymucho Messages postés 146 Statut Membre 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
  19. sophievar83hyeres Messages postés 42 Statut Membre
     
    non je n'en ai pas.

    ok je t'attends et toto aussi
    sophie
    0
  20. sophievar83hyeres Messages postés 42 Statut Membre
     
    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
  21. 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
  • 1
  • 2