2011-03-21 9 views
7

Tengo dos tablas con datos relacionados, y quiero seleccionar todos los registros de una tabla que no existen en la otra tabla, más algunos otros criterios en la tabla relacionada, de la siguiente manera (123 es solo para fines de ilustración):Zend Select NO EN

TABLE A 
    ID 
    SOMETHING 

TABLE B 
    TABLE_A_ID 
    TABLE_C_ID 
    SOMETHING 

Mi consulta, dirigido directamente contra los datos, sería la siguiente

SELECT A.SOMETHING 
    FROM A 
    WHERE A.ID NOT IN (
     SELECT 
      B.TABLE_A_ID AS ID 
      FROM B 
      WHERE TABLE_C_ID = 123 
    ); 

¿Cómo puedo ejecutar esto en Zend?

Respuesta

17

Puede ejecutar sql directo, usando $db->query(); la suya sería simplemente:

$results = $db->query("SELECT A.SOMETHING 
FROM A 
WHERE A.ID NOT IN (
    SELECT 
     B.TABLE_A_ID AS ID 
     FROM B 
     WHERE TABLE_C_ID = ? 
)", $id); 

EDITAR: Para responder si esto se puede hacer con la notación de objetos, sí:

$sub_select = $zdb->select() 
        ->from("b", array("table_a_id AS id")) 
        ->where("table_c_id = ?", 'a'); 
$select = $zdb->select() 
       ->from("a", array("something")) 
       ->where("id NOT IN ?", $sub_select); 
print $select->__toString(); 

da

SELECT `a`.`something` FROM `a` 
WHERE (id NOT IN 
    (SELECT `b`.`table_a_id` AS `id` FROM `b` WHERE (table_c_id = 'a'))) 
+0

¿Hay una manera de hacerlo esto con Zend_Db_Table :: SELECT_WITH_FROM_PART? – Elie

+0

¡Gracias! Exactamente lo que estaba buscando. – Elie

Cuestiones relacionadas