Creer un nom de champ avec une requete dedans

Mammouth du PHP | 1339 Messages

31 juil. 2014, 00:21

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
Modifié en dernier par moogli le 31 juil. 2014, 11:02, modifié 1 fois.
Raison : correction code pour colorisation de la syntaxe
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 juil. 2014, 11:08

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) ;)


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 1339 Messages

31 juil. 2014, 11:17

Le problème c'est que j'ai besoin de récupérer les infos qui sont dans IN()
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 juil. 2014, 14:33

l'id release tu l'a déjà.
l'autre tu l'ajoute dans le select (et le group by).

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 1339 Messages

31 juil. 2014, 16:29

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
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 juil. 2014, 22:11

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]


@+
Il en faut peu pour être heureux ......