PHP / MySQL结合两个查询来减少循环

时间:2015-03-11 22:40:33

标签: php mysql sql

我有以下查询,结果然后循环运行另一个查询并检索另一组结果,但我想结合这些,所以我没有运行这么多查询并加快一切,但我&#39 ;尝试了几次迭代,并获得 null 结果或语法错误。 所以在这里寻找一些社区魔术。

查询1:

SELECT tou_tracking_start, tou_tracking_end, tou_tracking_timestart,
tou_tracking_timeend, tou_tracking_units, daytype_ID 
FROM db_tou_tracking 
WHERE ICP_ID = '39' 
AND (tou_tracking_start >= '2013-01-01' AND tou_tracking_end <= '2013-12-31')

将其结果循环出来,然后在下一个查询中使用:

SELECT rates_tou_rate, rates_tou_PPD FROM db_rates_tou 
WHERE (rates_tou_start <= '" .$tou_tracking_start . 
    "' AND rates_tou_end >= '" . $tou_tracking_end . "') 
AND (rates_tou_timestart <= '" . $tou_tracking_timestart . 
    "' AND rates_tou_timeend >= '" . $tou_tracking_timeend . "') 
AND daytype_ID = ".$tou_tracking_daytype_ID." 
LIMIT 1

如果这些可以合并,那么我只需要选择:

  • tou_tracking_start
  • tou_tracking_end
  • rates_tou_rate
  • rates_tou_PPD

非常感谢您提供帮助。

1 个答案:

答案 0 :(得分:0)

我会使用JOIN

SELECT tt.tou_tracking_start, tt.tou_tracking_end, rt.rates_tou_rate, rt.rates_tou_PPD
FROM db_tou_tracking tt
JOIN db_rates_tou rt ON rt.daytypeID = tt.daytype_ID
AND (tt.tou_tracking_start >= '2013-01-01' AND tt.tou_tracking_end <= '2013-12-31')

tt是db_tou_tracking的别名,rt是db_rates_tou的别名。

我假设它们在两个表中都与daytype_ID匹配,并且存在1对1的关系。