2012-06-23 2 views

ответ

8

Я хотел бы сделать:

$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')); 
} 

Не относится к вашему вопросу, но вы всегда должны использовать заполнители для защиты от SQL-инъекции - хотя, если вы используете конструктор запросов, как выше то это позаботится об этом для вас. Кроме того, вы всегда должны использовать функцию t() при записи текста на экран.

+0

Хмм, хороший способ, но я не могу сказать, что это самый быстрый способ :) голосуйте! – Bob

+0

Этот способ в порядке, столбцы индексируются в любом случае, поэтому я не вижу, чтобы это было достаточно медленным, чтобы оправдать поиск другого пути. Возможно, стоит посмотреть, сколько времени займет запрос и отправит назад, посмотрите на эти функции. Http://api.drupal.org/api/search/7/timer_ –

6

db_select() путь медленнее, чем db_query(). См. this thread для сценариев, где db_select() лучше, чем db_query().

db_query() -> fetchField() - самый простой подход. См. Следующий фрагмент:

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

Это лучший пример, который я видел еще для того, как замените функцию 'db_result()' Drupal 6 (т.е. 'if (db_result ($ query)) {// do stuff} else {// no records}') – DrewT

Смежные вопросы