2010-11-02 64 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