web-dev-qa-db-fra.com

Comment écrire une requête de jointure gauche?

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
7
enjoylife

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.

11
Berdir
$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.
}
25
Sivaji
        $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();
0
gurcharan