php - 从 mysql 表中的一行中选择具有特定名称的最新行

标签 php mysql

我有这样的 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/

相关文章:

php - 使用 PDO 获取行和计数

php - 更新 SQL 数据库中变量不为空的行

php - 在 PHP 中使用从 mysql 表返回的值

php - 检索不在值数组中的多行

php - 在 phpmyadmin 数据库设计器中建立关系有什么意义?

具有多列的 MySQL 嵌套选择

mysql - 迄今为止的字符串不起作用(php 和 MySQL

提交后 PHP session 丢失

PHP SQL 以及将 'WHERE' 与变量一起使用

php - 搜索结果后如何更新库存数量?