Je veux obtenir la valeur de "vid" en connaissant l'ID du nœud, et obtenir la valeur de "name" pour les lignes où "vid" est égal à 2.
S'il s'agissait d'une simple requête, je ne saurais pas l'écrire; Je ne sais pas comment écrire une requête de jointure gauche.
La requête SQL "ordinaire" dans Drupal est la suivante:
$result = db_query('SELECT tid FROM {taxonomy_index} WHERE nid = :nid', array(':nid'=>$nid));
La requête SQL brute équivalente est la suivante:
SELECT did, name FROM taxonomy_index as ti LEFT JOIN taxonomy_term_data AS ttd ON ti.tid = ttd.tid WHERE vid = 2 and nid = $nid
Vous n'avez pas besoin d'utiliser db_select () pour une requête statique comme celle-ci. En fait, vous ne devriez pas voir Étant donné que db_select est beaucoup plus lent que db_query, pourquoi voudrais-je l'utiliser? .
Vous avez juste besoin de passer cela à db_query (), la seule chose qui a changé est la façon dont vous ajoutez des espaces réservés.
$result = db_query('select tid,name from {taxonomy_index} as ti left join {taxonomy_term_data} as ttd on ti.tid=ttd.tid where vid=2 and nid=:nid', array(':nid' => $nid));
foreach ($result as $term) {
// $term contains the object for the taxonomy term.
}
Voir http://drupal.org/developing/api/database pour plus d'informations et mon article de blog pour générique Drupal 6 à 7 informations de conversion de la syntaxe de la base de données.
$terms = db_select('taxonomy_index', 'ti')
->fields('ti', array('tid', 'name'));
$terms->leftJoin('taxonomy_term_data', 'ttd', 'ti.tid = ttd.tid');
$terms->condition('vid', 2)
->condition('nid', $nid)
->execute();
while ($term = $terms->fetch()) {
// $term contains the object for the taxonomy term.
}
$catalog_pagination = db_select('taxonomy_index', 'ti')
->fields('pimg',array('uc_product_image_target_id','entity_id'))
->fields('fm',array('fid','filename'))
->fields('ti', array('nid', 'tid'));
$catalog_pagination->leftJoin('node__uc_product_image', 'pimg', 'pimg.entity_id = ti.nid');
$catalog_pagination->leftJoin('file_managed', 'fm', 'fm.fid = pimg.uc_product_image_target_id');
$catalog_pagination->condition('ti.tid', $term_id);
$catalog_pagination->orderBy('ti.nid', 'DESC');
$catalog_pagination = $catalog_pagination->execute();
$total_pages = $catalog_pagination->fetchAll();