所以我试图回应来自2个不同表格的10个最新数据。我试过了
$stmt60 = $db->prepare("SELECT * FROM 54x2 ORDER BY date_time DESC LIMIT 5");
$stmt60->execute();
$stmt61 = $db->prepare("SELECT * FROM dd ORDER BY date_time DESC LIMIT 5");
$stmt61->execute();
$row60 = $stmt60->fetch();
$row61 = $stmt61->fetch();
我还将它存储在如下的大量数组中:
$var = array($row60['date_time'], $row62['date_time'], $row64['date_time'], $row66['date_time'], $row68['date_time'], $row70['date_time'], $row72['date_time'], $row74['date_time'], $row76['date_time'], $row78['date_time']);
$var7 = array($row61['date_time'], $row63['date_time'], $row65['date_time'], $row67['date_time'], $row69['date_time'], $row71['date_time'], $row73['date_time'], $row75['date_time'], $row77['date_time'], $row79['date_time']);
做了大约10次,偏移量增加1然后确实像100个if语句检查whcih一个更新但我已经尝试了几个小时这样做,我无法让它工作。如果没有100-200 if语句,是否有更简单的方法可以做到这一点?
答案 0 :(得分:0)
这样问题就消失了。列数应该相同,但您可以控制您获取的内容,以便您可以通过指定您获取的确切列来安排(除非这些是完全不同的结果,并且您需要来自每种类型的完全不同的数据)
SQL:
(SELECT date_time,a,b,c FROM table_a ORDER BY date_time DESC LIMIT 5)
UNION
(SELECT date_time,a,b,c FROM table_b ORDER BY date_time DESC LIMIT 5)
ORDER BY date_time DESC
这个想法是每次比较两个当前元素并移动一个指针(较大的一个)并保持第二个指针保持不变时,一次(一起)遍历两个结果 - 直到你到达两个结果的末尾
$stmt60 = $db->prepare("SELECT * FROM 54x2 ORDER BY date_time DESC LIMIT 5");
$stmt60->execute();
$stmt61 = $db->prepare("SELECT * FROM dd ORDER BY date_time DESC LIMIT 5");
$stmt61->execute();
$row60 = $stmt60->fetch();
$row61 = $stmt61->fetch();
do
{
if($row60 && (!$row61 || $row60['date_time']>$row61['date_time']))
{
var_dump($row60); // output row60
$row60 = $stmt60->fetch();
}
if($row61 && (!$row60 || $row61['date_time']>=$row60['date_time']))
{
var_dump($row61); // output row61
$row61 = $stmt61->fetch();
}
}
while($row60 || $row61);
我可能不应该提到这个,因为内存消耗和效率都比选项#2差得多。
但是,您可以创建从两个语句中提取的所有元素的单个数组,然后在php中对结果进行排序(usort
或array_multisort
)