2010-05-09 10 views
7

En algunos idiomas (me viene a la mente ColdFusion), puede ejecutar una consulta en el conjunto de resultados de una consulta previa. ¿Es posible hacer algo así en php (con MySQL como base de datos)?¿Puede php consultar los resultados de una consulta previa?

en cierto modo me quieren hacer:

$rs1 = do_query("SELECT * FROM animals WHERE type = 'fish'"); 
$rs2 = do_query("SELECT * FROM rs1 WHERE name = 'trout'"); 
+0

En realidad, no respondiendo a su pregunta, pero ¿qué pasa con el uso de una vista de SQL en su lugar? – Sylvain

Respuesta

6

No hay función de MySQL como esto para PHP, sin embargo hay una más avanzada substitute por ello.

Editar: Para aquellos de ustedes que no saben lo que es una consulta de consultas, es exactamente esto y hay un propósito que algunas personas lo hacen así. ¡Usar un operador AND es **** NOT **** lo mismo! Si quiero resultados donde username = 'animuson' para una parte de mi script y luego quiero todos los resultados de esa consulta donde status = '1', no es lógico que ejecute otra consulta usando un operador AND, es es mucho más lógico recorrer los resultados previos en PHP. Dejen de votar las cosas sin leer los comentarios sobre por qué no fueron votados en primer lugar, eso es perezoso. Si no tiene una pista de lo que se está hablando, no debería estar votando o bajando votos en primer lugar.

2

Bueno, es posible que desee hacer esto sin tocar el PP:

while($t = mysql_fetch_array($rs1)){ 
    if($t[name] == 'trout'){ 
     echo 'This is the one we\'re looking for!'; 
     break; 
    } 
} 
1

En PHP, sería terriblemente ineficiente. Tendría que recorrer cada fila y verificar que su name fuera trout. Sin embargo, ¿hay alguna razón por la que no pueda hacer

SELECT * FROM `animals` WHERE `type` = 'fish' AND `name` = 'trout' 

en SQL? Sería mucho, mucho más rápido.

+0

No creo que comprenda el propósito de una consulta de consultas. – animuson

+0

¿No sería más rápido buscarlo en la memoria de PHP que volver a martillar en una gran base de datos? Sin embargo, podría estar equivocado. – Robus

+0

@Robus: Probablemente. Si obtienes 100 de 1,000 resultados con la consulta inicial de peces, sería mucho mejor buscar en PHP en lugar de tamizar a través de 1,000 resultados nuevamente con una consulta adicional. – animuson

0

¿Utiliza la palabra clave AND?

"SELECT * FROM animals WHERE type = 'fish' and name='trout'" 

Además, se puede utilizar LINQ para php http://phplinq.codeplex.com/

+0

¿Qué pasa si quieres los resultados para la consulta de peces y luego los resultados más la trucha? Luego debe ejecutar dos consultas separadas ... – animuson

1

También puede hacer algo como

select morestuff from (select stuff from table where a = b) where c = d; 
+1

Esta es solo una forma más complicada y mucho más lenta de usar un operador AND. – animuson

Cuestiones relacionadas