Page 1 sur 1

Mysql_Query : 3 en 1, Help ...

Posté : 25 août 2009, 19:08
par Ludoc
Hello à tous,

Je me présente rapido, Ludoc, réalisateur et créateur d'Indabuz mais je suis ici pour parler de code PHP qui est une autre de mes passions :)
Étant autodidacte, j'ai certaines lacunes au niveau des bases mais je pense que le problème que je rencontre en ce moment est de niveau "avancé" et non "débutant" et comme je connais pas tout le vocabulaire du parfait codeur (d'ailleurs je n'ai pas trouvé de titre explicite pour mon problème), je vais tenter une explication par quelques lignes de code :

J'ai une table Feed composée ainsi :
feed_date > date de l'action
feed_table > photo ou video ou news
feed_element > id de la photo, de la vidéo ou de la news

Ensuite j'ai trois tables photo, video et news qui ont la même structure notamment pour leur id puisqu'elles ont respectivement les variables photo_id, video_id et news_id.

Alors mon délire dans cette histoire c'est de tout connecter dans un mysql_query.
Voila ce que je fais actuellement pour que ça marche (en code raccourci juste pour se faire une idée) :

Code : Tout sélectionner

$data1 = mysql_query("SELECT feed_table, feed_element FROM feed WHERE feed_date > 1251219517"); if($feed_table==video) $data2 = myql_query("SELECT * FROM video WHERE video_id=$feed_element"); elseif($feed_table==photo) $data2 = myql_query("SELECT * FROM photo WHERE photo_id=$feed_element"); else $data2 = myql_query("SELECT * FROM news WHERE news_id=$feed_element");
Et je souhaiterai obtenir un truc du genre :

Code : Tout sélectionner

mysql_query("SELECT * FROM feed WHERE feed_date > 1251219517 AND (SELECT * FROM ".feed_table." WHERE ".feed_table."_id=".feed_element );
Avez vous une idée pour résoudre ce problème ? Quelle liaison adoptée ?
Merci.

Ludoc.

Re: Mysql_Query : 3 en 1, Help ...

Posté : 25 août 2009, 21:11
par Berzemus
Hum, c'est plus un problème d'SQL que de php.. d'ailleurs, c'est un problème purement SQL. C'est un sujet très intéressant à étudier, et ça mérite amplement qu'on y approfondisse sa connaissance; mysql est un logiciel bien plus complet et capable que ne le croient la plupart de ses utilisateurs (la rançon du succès, ma foi).

Le problème c'est que sans vraiment penser en SQL, c'est dur de faire une bonne structure des tables (c'est déjà la moitié du boulot), après c'est facile d'y opérer des jointures dans tous les sens. En tout cas, la pire des choses, c'est de vouloir obtenir (ou faire) du procédural.

Au hasard, je pense une requête de ce style, mais je suis sur le point de manger donc pas le temps d'y consacrer plus de considération:

Code : Tout sélectionner

select * from feed join video on feed.feed_element = video.video_id join photo on feed.feed_element = photo.photo_id join news on feed.feed_element = news.news_id where feed.feed_date > 12365487

Re: Mysql_Query : 3 en 1, Help ...

Posté : 25 août 2009, 22:40
par furiouslol
Salut

Effectivement comme le dit Berze, c'est purement sql, je te conseille de lire ce tuto : faq-tutoriels/les-jointures-niveau-debutant-t21507.html
Il explique clairement la notion de jointure, et est tout a fait indiqué pour ce que tu as a faire, spécialement dans ton cas le LEFT JOIN