Partage
  • Partager sur Facebook
  • Partager sur Twitter

Barre de Recherche AS3>PHP&SQL

Un problème au niveau du SQL, je ne m'en sort pas ...

    19 juillet 2011 à 19:11:09

    Bonjour,
    Aujourd'hui pour les besoins de mon site, j'ai crée en AS3 une barre de recherche qui envoi à PHP une variable entrée dans celle-ci.
    Jusque là tout va bien, cela fonctionne : PHP récupère cette variable.
    Seulement cette variable doit être vérifié dans une base de donnée, autrement dit : si elle existe ou non dans cette base.
    Le problème c'est que dans ma base de donnée, j'ai plusieurs tables, et je voudrais que le SQL cherche dans toutes les tables pas seulement une. j'ai donc pensé à
    $requête_SQl= "SELECT `Titre du Film` FROM * WHERE `Titre du Film` = '".$_GET['DATARECHERCHE']."' ";
    

    avec "*" mais cela ne fonctionne pas.
    Par la suite, comment je pourrais récupérer le nom de la table dans laquelle il est allé vérifier cette valeur ?

    Merci de votre aide :)
    • Partager sur Facebook
    • Partager sur Twitter
      20 juillet 2011 à 11:15:07

      Tu dois utiliser les jointures, donc écrire tout les noms de tables présents dans la base dans ta requête.
      Tu n'as pas le droit d'utiliser * (du moins avec MySQL) pour dire "toutes les tables de ma base".
      • Partager sur Facebook
      • Partager sur Twitter
        20 juillet 2011 à 13:07:15

        Merci beaucoup pour ta réponse guk92,
        J'y ai pensé mais je pensais que * marcherais.
        Aurais tu également une idée de comment je pourrais indiquer le nom de la table dans laquelle il à vérifié cette variable ?

        Merci encore :)

        EDIT : J'ai essayé avec une jointure mais cela ne fonctionne pas, et pourtant il me semble que la syntaxe est bonne o_O

        $requete="SELECT * FROM `rubrique action` INNER JOIN `rubrique comedie` ON `rubrique action`.`Titre_du_Film` = `rubrique comedie`.`Titre_du_Film` WHERE `Titre_du_Film` = '".$_GET['DATARECHERCHE']."' ";
        $result = mysql_query($requete);
        $reponse= mysql_num_rows($result);
        if ($reponse == 1)
        {
        echo 'Existant';
        
        }
        else
        {
        echo 'Non Existant';
        }
        


        La requête est censée vérifié si $_GET['DATARECHERCHE'] existe dans l'une des deux tables. Je ne comprend pas car j'ai l'erreure :
        ( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\PHP\traitement_recherche_film.php on line 16


        Merci de m'aider :)
        • Partager sur Facebook
        • Partager sur Twitter
          20 juillet 2011 à 21:23:31

          Essaye :
          if ($reponse){
          //...
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            20 juillet 2011 à 21:50:59

            Je comprends mieux d'où vient ton problème de recherche.

            Tu as mal conçu ta base de données.
            Il devrait y avoir une table Films, un table Rubriques (contenant action, comédie, etc.) et une autre table intermédiaire faisant la relations entre les films et les rubriques (un film peut appartenir à la catégorie Science Fiction et Action par exemple, à moins que tu décides qu'un film ne puisse que dans une seule rubrique). De cette façon, tu ne feras la recherche que dans une seule table.
            Aussi, essaye d'éviter de mettre des espaces dans le nom de tes tables.

            Autre remarque : la requête que tu as tenté de faire ne te renverra des résultats que si ton film se trouve dans tes 2 tables, ce qui n'est pas le résultat attendu je crois.
            Un UNION (ALL) aurait été préférable.
            • Partager sur Facebook
            • Partager sur Twitter
              21 juillet 2011 à 0:27:14

              Merci à vous deux pour votre aide. En effet j'ai du mal avec Php et SQL bien qu'avoir lu les tutoriels traitants ces sujets. Mais il s'avère que j'en ai besoins car Flash ne Peut pas faire base de donnée. Pour en revenir au sujet, oui, j'ai décidé qu'un film appartiendrait à une seule rubrique (à cause du Flash). J'ai créé une colonne "genre Precis" qui traite le multi-genre. C'est pour faire un système de recherche vous l'aurez compris. Par ailleurs j'aurais voulu savoir si il était possible d'afficher toute la ligne du champs et stocker chaque valeur dans une variable différente après que la recherche à fonctionnée. Merci encore :)

              EDIT : J'ai trouvé la bonne requête ! :)
              $requete="SELECT `Titre_du_Film` FROM `rubrique action` WHERE `Titre_du_Film` = '".$_GET['DATARECHERCHE']."' UNION ALL SELECT `Titre_du_Film` FROM `rubrique comedie` WHERE `Titre_du_Film` = '".$_GET['DATARECHERCHE']."' ";
              


              En revanche, suis-je obligé de mettre à chaque fois le "WHERE `Titre_du_Film` = '".$_GET['DATARECHERCHE']."' " ?

              EDIT N° 2 : J'ai trouvé pour afficher toute la ligne :-° Désolé d'avoir posé la question alors que c'était à porté de main. :-°
              • Partager sur Facebook
              • Partager sur Twitter
                21 juillet 2011 à 15:07:25

                BlueRat a raison, ta base est mal optimisée.

                Dans ton cas, le WHERE sert à limiter la recherche à un nom de film, ta requête équivaut en ce moment à :
                Je veux tout les noms de film de ma table `rubrique action` là où j'ai entré le titre du film suivant $_GET['DATARECHERCHE'] auquel j'ajoute tout les noms de film de ma table `rubrique comedie` là où j'ai entré le titre du film suivant $_GET['DATARECHERCHE']

                Comme tu as un WHERE limitant en ce moment ta recherche à un seul nom de film (en considérant que tu n'as qu'un nom de film unique par film dans tes tables), tu as 2 requêtes lié par un UNION ALL, tu dois donc logiquement avoir 2 résultats retournés.

                Je pense que tu dois utiliser un UNION et non un UNION ALL pour ne retourner qu'un seul résultat.

                UNION :
                http://sql.1keydata.com/fr/sql-union.php

                UNION ALL :
                http://sql.1keydata.com/fr/sql-union-all.php


                Si tu enlève ton WHERE tu vas retourner tout les noms de films présents dans tes deux tables avec un UNION ALL.
                Avec un UNION tu vas retourner tout les noms de films distincts entre tes deux tables.
                Le problème c'est que tu vas retourner des noms de films qui seront des films d'action sans forcément être des comédies (et vice versa), tu es en faite limité à un nom de film dans ta situation (d'où la nécessité de ton WHERE).
                C'est pour cela que ta base est mal optimisée.
                • Partager sur Facebook
                • Partager sur Twitter
                  24 juillet 2011 à 23:06:03

                  Merci à toi guk92, mais je ne comprend pas car pourtant ma requête fonctionne très bien ! Oo
                  Et il ne m'affiche qu'un seul résultat et il est bon à chaque fois.
                  (J'ai rajouté deux colonnes dans chaque tables, une qui indique le genre précis et l'autre qui indique la rubrique où le film ce trouve.) Et il n'y à pas de défaut puisque quand je fais une recherche d'un film d'action par exemple dans les deux tables, il me renvoi bien le nom de la rubrique qui est "Rubrique Action" et toutes les infos concernant le film. Et pourtant j'ai utilisé un UNION ALL :/
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Barre de Recherche AS3>PHP&SQL

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown