Belirli bir örnekte, durumu basitçe şöyle yazmalısınız:
$query->condition('n.language', 'ab', '<>');
Bir alt sorgudan döndürülen değerleri temel alan bir veritabanındaki satırları seçmeniz gereken genel durumda, aşağıdakileri göz önünde bulundurmalısınız:
"NOT IN", operatör olarak kabul edildi SelectQuery::condition()
. Aslında, aşağıdaki sorgu yürütülür:
$query = db_select('node', 'n')->fields('n');
$query->condition('n.nid', array(1, 2, 3), 'NOT IN');
$nodes = $query->execute();
foreach ($nodes as $node) {
dsm($node->nid);
}
Koşullu fıkralarda ("Subselects") bildirildiği gibi , SelectQuery::condition()
aynı zamanda tarafından döndürülenler SelectQueryInterface
için değer olarak uygulayan bir nesneyi de kabul eder ; Buradaki sorun aslında değeri sadece eşit olduğunda kullanabilirsiniz . Bkz subselects IN değeri olarak kullanıldığı durumlar dışında, DBTNG koşullarda çalışmayı yok .$value
db_select()
$operator
"IN"
Alt sorguda "NOT IN" işlecini kullanabilmenin tek yolu condition
şudur:
- Bir dizi almak için alt sorguyu yürütün
Aşağıdaki pasajda olduğu gibi koşulu ayarlayan ana sorguyu yürütün
$query->condition($key, $subquery_result, 'NOT IN');
$subquery_result
alt sorgunun sonucunu içeren dizidir.
Aksi takdirde, where()
başkalarının söylediği gibi kullanabilirsiniz ; bu, sorgunun eklemeniz gereken kısmı için bir dize kabul eder.
Bunun db_select()
daha yavaş olduğunu unutmayın db_query()
; Sorgunun diğer modüller tarafından değiştirilebileceğini bildiğiniz zaman ilkini kullanmalısınız. Aksi halde, hook_query_alter()
sorgunuzu değiştirmek için diğer modüllerin kullanılması gerekmiyorsa, kullanmanız gerekir db_query()
.
Düğümlere erişme durumunda, yalnızca kullanıcının erişebildiği düğümleri edinmeniz gerekiyorsa , sorgunun etiketi olarak kullanmanız db_select()
ve eklemeniz gerekir . Örneğin , aşağıdaki kodu kullanır.'node_access'
SelectQuery::addTag()
blog_page_last()
$query = db_select('node', 'n')->extend('PagerDefault');
$nids = $query
->fields('n', array('nid', 'sticky', 'created'))
->condition('type', 'blog')
->condition('status', 1)
->orderBy('sticky', 'DESC')
->orderBy('created', 'DESC')
->limit(variable_get('default_nodes_main', 10))
->addTag('node_access')
->execute()
->fetchCol();
Benzer kod tarafından kullanılır book_block_view()
.
$select = db_select('node', 'n')
->fields('n', array('title'))
->condition('n.nid', $node->book['bid'])
->addTag('node_access');
$title = $select->execute()->fetchField();
SELECT nid FROM node WHERE language != 'ab'
nedir?