2013-09-06 2 views
1

У меня есть сомнение. Можно ли выполнить следующие два запроса в одном запросе?извлечение данных из двух таблиц, удовлетворяющих условию

SELECT id FROM table1 WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) AND status<>200 ORDER BY time_stamp ASC LIMIT 2 "

и SELECT email FROM table2 WHERE wid='".$xy."'" где $xy это идентификатор извлекается из первого запроса на выборку.

мой PHP код:

$dat =mysql_query("SELECT * FROM table1 WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) AND status<>200 ORDER BY time_stamp ASC LIMIT 2 "); 
while($dt= mysql_fetch_assoc($dat)){ 
$add= mysql_query("SELECT email FROM table2 WHERE wid='".$dt['id']."'"); 
$result= mysql_fetch_assoc($add); 
$to=$result['email']; 
$subject="site down"; 
$message="your site is down"; 
$header="From:[email protected]"; 
$retval=mail($to,$subject,$message,$header);} 

мои таблицы выглядит следующим образом:

table1:

id  url  status  time_stamp 

9  dgfgg  404  2012:09:05 13:04:56 

10  gfh  404  0000:00:00 00:00:00 

11  fg  200  0000:00:00 00:00:00 

table2:

wid email 

9  [email protected] 

10  [email protected] 

11  [email protected] 

кто-нибудь может предложить один запрос, сделать работа вместо writin g два, как я сделал в моем php-коде?

+0

Не могли бы вы опубликовать результат первого выбора? – Mihai

+0

@Mihai: его int id 9 и 10. эти же идентификаторы находятся в таблице 2, которая также содержит соответствующие идентификаторы почты. Мне нужно отправить почту на эти идентификаторы почты. – user007

+0

SELECT email FROM table2 WHERE wid IN (9,10) работает ли это? – Mihai

ответ

-1
SELECT email FROM table2 WHERE wid=(SELECT id FROM table1 
WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) 
AND status<>200 ORDER BY time_stamp ASC LIMIT 2) 

Оп, в случае, если она возвращает более чем один идентификатор использовать IN вместо =

$dat =mysql_query("SELECT email FROM table2 WHERE wid IN(SELECT id FROM table1 
WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) 
AND status<>200 ORDER BY time_stamp ASC)LIMIT 2 "); 
while($result = mysql_fetch_assoc($dat)){ 
$to=$result['email']; 
$subject="site down"; 
$message="your site is down"; 
$header="From:[email protected]"; 
$retval=mail($to,$subject,$message,$header);} 

Да и функция MySQL являются устаревшей PHP 5.5, использование MySQLi или PDO.

EDIT нормально, попробуйте поставить LIMIT 2 вне первой скобкой

http://sqlfiddle.com/#!2/1152d/1.

+0

это хорошо работает, когда принимается только один идентификатор. Но когда выбрано два идентификатора, оба они не работают. Я имею в виду IN и = .. – user007

+0

Это дает вам какую-либо ошибку? – Mihai

+0

no..only пустая страница – user007

0

Попробуйте

SELECT email FROM table2 WHERE wid IN (SELECT id FROM table1 
WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) 
AND status<>200 ORDER BY time_stamp ASC LIMIT 2) 
+0

Зачем голосовать на этом? – rakeshjain

+0

это не сработало .. :( – user007

+0

@ user007 вы можете показать свою схему базы данных с образцами данных. Я не вижу ничего плохого в этом запросе – rakeshjain

Смежные вопросы