Db_select () kullanarak iki tablodan alan seçin


15

Ben kullanıyorum db_select()ve ben sözdizimini anlamıyorum fields()yöntemle. join()Başka bir masaya katılmak için a kullanıyorum . Yani tablolar için , tve nşöyle bir şey yapmak istiyorum

SELECT t.tid, t.field1, t.field2, n.title, n.author 
FROM table t INNER JOIN node n ON t.nid = n.nid;

Sahibim

$results = db_select('table', 't')
  ->fields( ... )
  ->join('node', 'n', 'n.nid = t.nid')
  ->execute();

Ama gördüğünüz gibi ben de kayboldum fields(). Gördüğüm örnekler sadece bir tablo için alanları belirtiyor:

->fields('t', array('tid', 'field1', 'field2'))

Kullanmak istediğim sözdizimi nedir?

Yanıtlar:


28

Kolay, alanları () iki kez çağırmanız yeterlidir.

$query = db_select('table', 't');
$query->join('node', 'n', 'n.nid = t.nid');
$result = $query
  ->fields('t', array('tid', 'field1', 'field2'))
  ->fields('n', array('nid', 'field1', 'field2'))
  ->execute();

foreach ($result as $row) {
  // Do something with $row.
}

Çoğu yöntemi birden çok kez çağırabilirsiniz (birden çok alan, birden çok koşul, birden çok sıralama düzeni, birden çok birleştirme, ...).

Örneğimde gösterildiği gibi, join () çağrısının ayrı olması ve "zincirleme" yapılamaması gerektiğini unutmayın (bu, sorgu nesnesini döndürmediğinden, tablo diğer adı.


2

Örtülü bir birleşim, fantezi bir şey yapmıyorsanız db_query () ile çalışmaya devam eder. Bunun kötü bir uygulama olup olmadığından emin değilim. Bir kez IRC sordum ve kimseden bir yanıt alamadım. D6'dan kalanlarınız varsa, yine de çalışırlar.


3
Db_query () kullanımı, db_select () kullanmanın açık bir nedeni olmadıkça mükemmel bir şekilde iyidir (aslında performans nedeniyle önerilir). Bu nedenleri burada özetledim: drupal.stackexchange.com/questions/1200/…
Berdir

Harika! Zaten benimkini dönüştürmek için çok tembeltim. ;)
colan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.