На некоторых языках (ColdFusion приходит на ум) вы можете запускать запрос в результирующем наборе из предыдущего запроса. Можно ли сделать что-то подобное в php (с MySQL как с базой данных)?
Я вроде хочу сделать:
$rs1 = do_query( "SELECT * FROM animals WHERE type = 'fish'" ); $rs2 = do_query( "SELECT * FROM rs1 WHERE name = 'trout'" );
Для PHP нет такой функции MySQL, но для нее есть более продвинутая замена .
Изменить: для тех из вас, кто не знает, что такое запрос запросов, это именно это, и есть цель, которую некоторые люди делают так. Использование оператора AND – это **** НЕ **** то же самое! Если мне нужны результаты, где username = 'animuson' для одной части моего скрипта, а затем хотите получить все результаты из этого запроса, где status = '1', для меня не логично запускать другой запрос с помощью оператора AND, это гораздо логичнее перебирать предыдущие результаты в PHP. Перестаньте останавливать вещи, не читая комментариев о том, почему они не были поддержаны в первую очередь, это просто лениво. Если вы не знаете, о чем говорят, вы не должны быть первыми или ниспровергать в первую очередь.
Ну, вы можете сделать это, не касаясь db:
while($t = mysql_fetch_array($rs1)){ if($t[name] == 'trout'){ echo 'This is the one we\'re looking for!'; break; } }
В PHP это было бы ужасно неэффективно. Вам нужно будет пройти через каждую строку и проверить, что ее name
было trout
. Однако есть ли какая-то причина, по которой вы не можете
SELECT * FROM `animals` WHERE `type` = 'fish' AND `name` = 'trout'
в SQL? Это было бы намного, намного быстрее.
Вы также можете сделать что-то вроде
select morestuff from (select stuff from table where a = b ) where c = d;
Использовать ключевое слово AND?
"SELECT * FROM animals WHERE type = 'fish' and name='trout'"
Кроме того, вы можете использовать LINQ для php http://phplinq.codeplex.com/