2010-11-02 17 views
8

Cómo escribir SQL como la consulta en Drupal,cómo utilizar como consulta en Drupal

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

Quiero añadir la CONDICIÓN como en esa

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

creo que writtern mal como formnat consulta , puede reescribir y decirme,

Respuesta

12

% sólo tiene que utilizar para escapar.

$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 
} 

El tipo de nodo no necesita escaparse.

3

OK, por lo que desea que el operador LIKE haga referencia a la columna title. Utilice esta consulta:

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

Esto se debe a que el operador LIKE requiere un nombre de columna que se determine. De lo contrario, su base de datos no tiene idea de en qué valor desea realizar la comparación. Ver here.

+0

quiero operador como campo de título – Bharanikumar

+0

estoy pidiendo drupal – Bharanikumar

+0

Esto es correcto, pero tiene que agregar variables para sustituir a esos marcadores de posición. Entonces, $ sql = db_query ("SELECCIONAR el título FROM node WHERE type = '% s' AND title LIKE '% S%'", $ type, $ title); $ result = db_result ($ sql); donde $ type y $ title son iguales a las cosas para las que está filtrando. Es posible que haya sabido esto; Solo quería decir lo obvio. – theunraveler

4

drupal_query reemplazar a %%% y% s de la cadena de valor

por lo que su código será

$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

Y aquí es un ejemplo de cómo utilizar LIKE en una consulta dinámica (Drupal 7 Sólo):

$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() se utiliza para escapa personajes que funcionan como caracteres comodín en un patrón similares.

+0

Esto es incorrecto, se hizo la pregunta sobre Drupal 6. Usted proporcionó una respuesta de Drupal 7 – generalconsensus

+0

Buen punto - Edité mi respuesta para dejar en claro que esto solo funciona en Drupal 7. Todavía podría resultar útil para alguien ... –

+0

Eso es ¡muchas gracias! – generalconsensus

Cuestiones relacionadas