Page 1 sur 1

Creer un nom de champ avec une requete dedans

Posté : 31 juil. 2014, 00:21
par Elie
Hello,

Mon titre est pas clair. Mon probleme est pas compliqué mais c'est un truc que j'ai jamais fait.

Actuellement j'ai 2 requetes.
Une qui recupere des informations et je fais une autre requete qui trouve un nombre en filtrant la recherche parmis les resultats de la premiere requete.
Cependant j'aimerai que cette deuxieme requete soit dans la premiere pour que ce resultat influences mon affichage.

Requete 1 :
SELECT `tbl_film`.`id_film`, `tbl_release`.`id_release` FROM `tbl_release` LEFT JOIN `tbl_film` ON `tbl_film`.`id_film` = `tbl_release`.`film_id` WHERE `tbl_release`.`afficher` = 1 ORDER BY `tbl_release`.`date` DESC LIMIT :debut, :nb 
Requete 2 :
<?php
$r = "SELECT COUNT(*) as `nb_fichier`, `release_id` FROM `tbl_fichier` WHERE `release_id` IN (".implode(', ', array_keys($release)).") GROUP BY `release_id`"
Du coup j'aimerai que cette deuxieme requete soit dans la premiere pour pourvoir faire un `nb_fichier` > 0

Merci,

Elie

Re: Creer un nom de champ avec une requete dedans

Posté : 31 juil. 2014, 11:08
par moogli
salut,

avec un subselect tous simplement ;)
SELECT COUNT(*) AS nb_fichier
      ,release_id
FROM   tbl_fichier
WHERE  release_id IN (SELECT tbl_release.id_release
                      FROM   tbl_release
                      LEFT   JOIN tbl_film
                      ON     tbl_film.id_film = tbl_release.film_id
                      WHERE  tbl_release.afficher = 1
                      ORDER  BY tbl_release.date DESC LIMIT :debut
                               ,:nb)
GROUP  BY release_id
j'ai viré les ` qui sont totalement inutile si tu n'as pade nom de champs ou table foireux (genre table, count, select etc) ;)


@+

Re: Creer un nom de champ avec une requete dedans

Posté : 31 juil. 2014, 11:17
par Elie
Le problème c'est que j'ai besoin de récupérer les infos qui sont dans IN()

Re: Creer un nom de champ avec une requete dedans

Posté : 31 juil. 2014, 14:33
par moogli
l'id release tu l'a déjà.
l'autre tu l'ajoute dans le select (et le group by).

@+

Re: Creer un nom de champ avec une requete dedans

Posté : 31 juil. 2014, 16:29
par Elie
J'ai voulu aléger le code mais ca t'as induit en erreur.
Le vrai code est :
SELECT `tbl_film`.`id_film`, `tbl_film`.`date` as `annee`, `tbl_film`.`titre` as `film`, `tbl_film`.`fichier`, `tbl_film`.`url` as `url_film`, `tbl_release`.`id_release`, `tbl_release`.`date`, `tbl_release`.`titre` as `release`, `tbl_release`.`url` FROM `tbl_release` LEFT JOIN `tbl_film` ON `tbl_film`.`id_film` = `tbl_release`.`film_id` WHERE `tbl_release`.`afficher` = 1 ORDER  BY tbl_release.date DESC LIMIT :debut, :nb
A ces informations importantes, je fais un 2eme requete pour obtenir le nombre de fichier pour chaque release.
Ce n'est qu'une seule requete c'est pas bien grave.
Mais je voudrais afficher que les release ayant un fichier parfois.

Il suffirait de chercher dans tbl_fichier directement mais il n'y a pas moyen de faire une requete qui serait AS `nb_fichier` et de faire WHERE `nb_fichier` > 0

Re: Creer un nom de champ avec une requete dedans

Posté : 31 juil. 2014, 22:11
par moogli
je suis un peu perdu sur ton modèle la.

ceci y a moyen d'avoir le nombre via un subselect.

par contre va falloir que le remette dans le where. si l'info ne t'inresse pas tu laisse que dans le where

par exemple
[mysql]
SELECT
f.id_film,
f.date AS annee,
f.titre AS film,
f.fichier,
f.url AS url_film,
r.id_release,
r.date,
r.titre AS rl,
r.url,
(SELECT
count(1)
FROM tbl_film tf
WHERE tf.id_film = r.film_id) AS nbfichier
FROM tbl_release r
JOIN tbl_film f ON f.id_film = r.film_id
WHERE r.afficher = 1 AND (SELECT
count(1)
FROM tbl_film tf
WHERE tf.id_film = r.film_id) >= 1
ORDER BY r.date DESC
LIMIT :debut, :nb;[/mysql]


@+