我有这样的 mysql 表:
Name1 Name2 Name3 Name4 date
----------
Rachel John Sebastian Luk 2015-07-20 18:20:13
Stephan Luk Michele Steve 2015-06-20 18:20:13
Rachel John Sebastian Luk 2015-09-20 18:20:13
Stephan Luk Michele Steve 2015-03-20 18:20:13
Rachel John Sebastian Luk 2014-07-20 18:20:13
Stephan Luk Michele Steve 2015-03-20 18:20:13
Rachel John Sebastian Luk 2015-05-20 18:20:13
Stephan Luk Michele Steve 2015-02-20 18:20:13
我有这样的数组:$names = ["Luk","Steve","Ingrid"]
我需要为每个数组的名称选择最近的行,其中名称存在。
我当前的代码是:
foreach ($names as $n){
$sql = "SELECT date FROM dbtable
WHERE name1='".$n."' OR name2='".$n."' OR name3='".$n."' OR
name4='".$n."' ORDER BY date DESC LIMIT 1";
$result = $con->query($sql);
$row = mysqli_fetch_array($result, MYSQL_ASSOC);
$date[$n] = $row['date'];
}
它工作正常,但是当数组 $names 和 mysql 表变大时,它变慢了。也许有一种方法可以减少对数据库的请求或更好的查询?
最佳答案
您可以将其作为一个 mysql 查询来执行。但我不确定它不需要太多资源。
如果表 t1 有 (Name1, Name2, Name3, Name4, date1)
Create Temporary table t2 (Name0 text);
Insert into t2 values ('Luk'), ('Steve'), ('Ingrid');
Select t2.Name0, max(t1.date1) maxtime from t1,t2 where t2.Name0 in (t1.Name1, t1.Name2, t1.Name3, t1.Name4) group by name0
结果
Name0 maxtime
Luk 2015-09-20 18:20:13
Steve 2015-06-20 18:20:13
关于php - 从 mysql 表中的一行中选择具有特定名称的最新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31523481/