IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Probleme d'exploitation d'une vue (VIEW) pour un tableau


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Probleme d'exploitation d'une vue (VIEW) pour un tableau
    Bonjour à tous,

    Je suis nouveau sur ce forum, et je suis débutant en php/mysql et j'ai un petit soucis...j'ai essayé de trouver une solution, mais j'ai rien trouver

    Je suis sous php4 et mysql 5 et sous linux.
    J'ai créer une vue grace à la fonction php mysql_query.
    Mais voila, lorsque je veux exploiter cette vue sous forme de tableau, aucune donnée ne s'affiche. Je ne comprends pas d'ou vient le probleme. Voici un bout de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php
    mysql_connect(...............);
    mysql_select_db("ma_base");
     
    mysql_query("CREATE VIEW ma_vue AS SELECT * FROM ma_table WHERE blabla='aaa'");
     
    $reponse = mysql_query("SELECT * FROM ma_vue WHERE blabla='bla'");
    mysql_close();
    while ($tab = mysql_fetch_array($reponse) )
    {
    ?>
    	<tr>
    		<td><?php echo $tab['champ1'] ?></td>
    		<td><?php echo $tab['champ2'] ?></td>
    		<td><?php echo $tab['champ3'] ?></td>
    	</tr>
    <?php 
    }
    ?>
    Et si je mets "ma_table" à la place de "ma_vue" sur la ligne $reponse...cela fonctionne très bien...
    J'ai oublié de précider quelque chose ?
    Merci de votre aide...

    A très bientot j'espère,

    Nico4731

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Premièrement, j'espère que tu ne laisses pas ton CREATE VIEW dans ton PHP car ele serait créée à chaque exécution du script, ce qui serait une erreur il me semble.

    Sinon, ce comportement est tout à fait normal : ta vue extrait de ta table tous les tuples dont le champ `blabla` est égal à 'bla'.
    Je reformule : tu te retrouveras avec une pseudo table `ma_vue` qui ne contiendra que des tuples ayant 'bla' dans le champ `blabla`. Par conséquent, si tu filtres ce même champ avec une autre valeur, tu n'auras aucun résultat.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Salut Kirkis,

    Merci pour ton message !

    Pour le CREATE VIEW, un test est effectué avant...donc pas de soucis, mais merci pour la remarque.
    Petite erreur de ma part, les 2 WHERE sont identiques...ce qui fait que l'erreur ne vient pas de la (je pense...).
    Lorsque je "regarde" ma vue avec mysql query browser, tout s'affiche correctement...c'est çà qui est bizarre...

    Encore merci,

    A bientot

    Nico4731

  4. #4
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    Salut toi,
    voilà je vais t'expliquer ton code:
    1- tu crées une vue: ...........(CREATE VIEW ma_vue
    2-A cette vue tu associes des données d'une requête qui n'est en fait que le pseudo de ma_vue AS SELECT * FROM ma_table WHERE blabla='aaa'");
    3- La réponse de cette requête $reponse doit être fidèle à ton speudo ie à ta requête . une autre façon de dire que ma réponse $réponse provient de la requête:... SELECT * FROM ma_table WHERE blabla='aaa'")
    ma_table ne doit pas être remplacé par ma_vue sur la ligne $reponse
    essaye la ligne $reponse = mysql_query("SELECT * FROM ma_table WHERE blabla='bla'"); ça doit marcher.

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    @polace : Cher ami, tu sembles avoir lu un peu rapidement le premier post : nico4731 nous y précise que cela fonctionne effectivement lorsqu'il le fait.
    De plus, ta méthode élimine complètement l'intérêt de créer une vue :/

    @nico4731 : Si tu filtres avec la même condition, je vois mal pourquoi cela ne fonctionne pas. Cela dit, je ne vois pas non plus pourquoi tu filtres selon la même condition, cela me semble bigrement redondant !

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Hello !


    Merci pour ton message Polace, mais comme le dit Kirkis, tu as mal lu mon 1er message...

    Je voulais pas m'étaller sur les WHERE mais il le faut:
    Dans mon 1er where, en gros, il y a: WHERE champ1=aaa and champ2=bbb and champ3=ccc... il y en a plusieurs...
    Et dans mon second j'ai: WHERE champx=xxx, je n'ai qu'un seul tri.

    Meme si je supprime le 2eme WHERE, je n'ai rien qui s'affiche dans mon tableau...c'est bizarreeeeeeee. C'est vraiment la vue qui pose probleme...

    J'espère etre assez clair...quoique

    Merci pour votre aide !

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Okay !

    J'ai cru un moment que cela pouvait être un souci d'algo plutôt que de requête mais non...
    Eh bien, en théorie, cela devrait fonctionner comme tu l'as prévu :/

    Quelqu'un prend la relève svp ?
    Tu as essayé un SELECT * FROM ma_vue; juste pour vérifier ?

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Pour qu'il n'y est pas de confusion, je reposte mon code sans le 2eme where qui ne sert à rien à la résolution de mon probleme...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php
    mysql_connect(...............);
    mysql_select_db("ma_base");
     
    mysql_query("CREATE VIEW ma_vue AS SELECT * FROM ma_table WHERE blabla='aaa'");
     
    $reponse = mysql_query("SELECT * FROM ma_vue");
    mysql_close();
    while ($tab = mysql_fetch_array($reponse) )
    {
    ?>
       <tr>
          <td><?php echo $tab['champ1'] ?></td>
          <td><?php echo $tab['champ2'] ?></td>
          <td><?php echo $tab['champ3'] ?></td>
       </tr>
    <?php
    }
    ?>

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    On s'est croisé

    Oui, j'ai bien essayé, et toujours rien

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Euh...
    Le SELECT qui sert à créer ta vue, il retourne quelque chose, au moins ?

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Pour arriver a quelque chose de plus sur et plus simple (il va plus rien resté ), je vire le premier where :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    mysql_connect(...............);
    mysql_select_db("ma_base");
     
    mysql_query("CREATE VIEW ma_vue AS SELECT * FROM ma_table");
     
    $reponse = mysql_query("SELECT * FROM ma_vue");
    mysql_close();
    while ($tab = mysql_fetch_array($reponse) )
    {
    ?>
       <tr>
          <td><?php echo $tab['champ1'] ?></td>
          <td><?php echo $tab['champ2'] ?></td>
          <td><?php echo $tab['champ3'] ?></td>
       </tr>
    <?php
    }
    ?>
    Donc si j'exécute ce code çà marche pas, et si je remplace ma_vue par ma_table sur la ligne $ reponse, çà fonctionne.

    Merci Kirkis !

  12. #12
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Sérieux ?
    Si tu fais une vue super simple qui contient des données et que tu fais un SELECT * de cette vue, cela ne te retourne rien ? Ta table n'est-elle pas vide ?

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Non non, ma table n'est pas vide, je t'assure
    SI je fais un select sur la table, çà me retourne des données, mais si je le fais avec la vue, rien, rien du tout !
    Et comme je l'ai dis tout à l'haure, si je regarde ma vue avec mysql query browser, ma vue est bien remplie de données !


  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Il y a forcément un truc évident qui nous a échappé :/

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Oui certainement, dis moi quoi
    Je sais que les versions antérieures à mysql 5 ne prennaient pas en charge les vues. Mettre PHP5 ne résoudrait pas le probleme ? je dis çà comme çà...
    Je pense que ce week end, je vais mettre la version 5 de phph, au cas ou, mais je ne sais pas si cela aura une utilité...

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Puisque c'est visiblement notre sujet rien qu'à nous, je vais me permettre de presque spammer :p
    Je doute également que PHP5 règle le souci. Cependant, c'est bien le fait que les vues soient récentes dans MySQL qui font que je les connais peu.

    Pas moyen de tester de mon côté vu que je travaille sur un MySQL plus ancien.
    Sérieusement, un coup de main serait bienvenu.
    Tu as essayé avec phpMyAdmin ?

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Oui, c'est vrai qu'on est seul au monde

    Et oui, j'ai déja essayé de voir les données avec phpmyadmin: il m'affiche bien tous les champs, mais aucune donnée...
    Je ne sais pas si phpmyadmin affiche en temps normal les données des vues, si quelqu'un peut affirmer quelque chose...

  18. #18
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'est triste s'il faut récupérer les données issues de vues différemment de celles issues de requêtes normales :/

Discussions similaires

  1. exploitation d'une vue materialisée
    Par nejib salem dans le forum Administration
    Réponses: 3
    Dernier message: 26/01/2011, 16h35
  2. Exploitation d'une vue dans JDeveloper
    Par nejib salem dans le forum JDeveloper
    Réponses: 1
    Dernier message: 11/08/2009, 11h06
  3. Probleme de performance sur une vue
    Par nomissamoht dans le forum Oracle
    Réponses: 1
    Dernier message: 06/03/2009, 15h51
  4. Probleme de requete sur une vue
    Par MaInR0 dans le forum JDBC
    Réponses: 10
    Dernier message: 10/11/2008, 21h26
  5. Raffraichir une vue (view)
    Par mikaoul dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 17/05/2007, 01h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo