2012-06-23 17 views

Odpowiedz

8

zrobiłbym:

$result = db_select('taxonomy_index', 'ti') 
    ->fields('ti', array('tid')) 
    ->condition('tid', 1) 
    ->condition('nid', 1) 
    ->range(0, 1) 
    ->execute() 
    ->rowCount(); 

if ($result) { 
    drupal_set_message(t('Exists')); 
} 

niezwiązane z pytaniem, ale zawsze należy używać zastępczych w celu ochrony przed SQL Injection - choć jeśli używasz Konstruktora kwerend jak wyżej to troszczy się o ciebie. Powinieneś także zawsze używać funkcji t() podczas pisania tekstu na ekranie.

+0

Hmm, dobry sposób, ale nie mogę powiedzieć, że to najszybszy sposób :) głosować w górę! – Bob

+0

W ten sposób wszystko jest w porządku, kolumny są indeksowane, więc nie widzę tego wystarczająco powolnego, aby uzasadnić znalezienie innego sposobu. Może być warta czasu, jak długo trwa zapytanie i wysyłania zwrotów, spójrz na te funkcje http://api.drupal.org/api/search/7/timer_ –

6

db_select() jest znacznie wolniejszy niż db_query(). Zobacz this thread dla scenariuszy, w których db_select() pasuje lepiej niż db_query().

db_query() -> fetchField() jest najprostszym podejściem. Zobacz następujący fragment:

<?php 

// Returns string(5) "admin" 
var_dump(db_query('select name from {users} where uid = 1')->fetchField()); 

// Returns bool(false) 
var_dump(db_query('select name from {users} where uid = -1')->fetchField()); 

</pre> 
+0

To jest najlepszy przykład, jaki widziałem, jak to zrobić zastępuje funkcję 'db_result()' Drupala 6 (np. 'if (db_result ($ query)) {// do rzeczy} else {// no records}') – DrewT

Powiązane problemy