2010-11-02 97 views
8

如何編寫SQL查詢功能在Drupal,如何使用查詢功能在Drupal

SELECT title FROM { node } WHERE type='%s' 

我想補充LIKE條件在

SELECT title FROM { node } WHERE type='%s' AND LIKE '%S%' 

我想我writtern錯像查詢formnat ,可以重寫並告訴我,

回答

12

只需使用%逃脫。

$result = db_query('SELECT title FROM {node} WHERE type = "%s" AND title LIKE "%%%s%%"', 'type', 'title'); 

while ($row = db_fetch_object($result)) { 
    // do stuff with the data 
} 

節點類型不需要轉義。

3

好吧,所以你想LIKE運營商參考title列。使用此查詢:

$sql = "SELECT title FROM node WHERE type='%s' AND title LIKE '%S%'"; 
$type = "type to use in query"; 
$title = "title to use in query";  
$result = db_result(db_query($sql, $type, $title)); 

這是因爲LIKE操作符需要指定列名稱。否則,您的數據庫不知道您想要執行比較的值。見here

+0

我想要運營商的標題字段 – Bharanikumar 2010-11-02 17:01:59

+0

我要求Drupal – Bharanikumar 2010-11-02 17:03:00

+0

這是正確的,但你必須添加變量來替代那些佔位符。所以, $ sql = db_query(「SELECT title FROM node WHERE type ='%s'AND title LIKE'%S%'」,$ type,$ title); $ result = db_result($ sql); 其中$ type和$ title等於您要過濾的內容。你可能已經知道這一點;我只是想說明這一點。 – theunraveler 2010-11-02 17:18:08

4

drupal_query替換%%到%和%s到字符串值

所以你的代碼會

$sql = "SELECT title FROM node WHERE type='%%%s' AND title LIKE '%%%S%%'"; 
$type = "type to use in query"; 
$title = "title to use in query";  
$result = db_result(db_query($sql, $type, $title)); 
3

這裏是如何在一個動態查詢(Drupal的7只)LIKE用一個例子:

$query = db_select('node', 'n') 
     ->fields('n', array('title')) 
     ->condition('type', 'my_type') 
     ->condition('title', '%' . db_like(search_string) . '%', 'LIKE'); 
    $result = $query->execute()->fetchCol(); 

db_like()用來逃脫,在LIKE模式工作作爲通配符的字符。

+0

這是錯誤的,有人問了關於Drupal 6的問題。你提供了一個Drupal 7的答案 – generalconsensus 2015-09-21 23:27:44

+0

好點 - 我編輯了我的答案,以清楚地表明這隻適用於Drupal 7.仍然可以證明對某人有用... – 2015-09-21 23:35:39

+0

這就是萬分感謝! – generalconsensus 2015-09-22 00:07:41