[Résolu] db_select imbrique

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour ,

Pouvez m'aider à transcrire cette requête SQL en DB_SELECT drupal 7.
SELECT no_lot, annee, nom FROM clm_t_coprop u WHERE
annee = (select max(annee) from clm_t_coprop where no_lot = u.no_lot) order by no_lot asc ;

Casse tête...

Merci de votre aide.

Forum : 
Version de Drupal : 

Re_bonjour ,

Après avoir pas mal galéré, j'ai la transcription de la requête ci-dessus qui marche mais je ne sais pas si elle est la plus optimisée.

Ce qui m'a beaucoup aidé c'est :
print_r($query1->__toString());

qui permet de voir la requête SQL et d'affiner au fur et à mesure le DB_Select. IL semble que "where" permet de remettre le "where" de SQL de manière semblable.

$query1 = db_select('clm_t_coprop', 'u') ;
$query1 -> fields('u', array('no_lot','annee', 'nom'));
$subquery = db_select('clm_t_coprop', 'subq');
$subquery -> addExpression('MAX(annee)', 'max_annee');
$subquery -> where('subq.no_lot= u.no_lot');
$query1 -> where('u.annee = ('. $subquery. ')');

$query1 = $query1->extend('PagerDefault')->extend('TableSort');
$query1 -> limit(10) ;

Je ne vous ai pas laissé le temps de chercher. Merci quand même. je suis preneur de tout conseil.

A bientôt.

Perso j'aurai écris :
->condition('u.annee' , $subquery); // troisième paramètre par defaut '=' mais l'on peut aussi mettre '<>' ou encore 'IN'
plutôt que :
$query1 -> where('u.annee = ('. $subquery. ')');

where est très rarement utilisé dans Drupal.