Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从mysql表中选择行中具有特定名称的最新行_Php_Mysql - Fatal编程技术网

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

Php 从mysql表中选择行中具有特定名称的最新行,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 S

我有如下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有(名称1、名称2、名称3、名称4、日期1)

结果

Name0 maxtime
Luk   2015-09-20 18:20:13
Steve 2015-06-20 18:20:13

您应该规范化您的结构-更改表的设计。并且您很容易受到
选择name,max(date)的攻击,其中名称位于(..)
。一个查询,无需循环或运行多个查询即可提供所需内容。如果可以避免,则不应在where子句中使用字符串。您也可以通过使用UserID来做同样的事情。谢谢,我们将阅读关于规范化的内容。至于注射,我确保名字是字母数字的。和thanx表示该选择名称的最大值(日期),其中名称位于(..)
Name0 maxtime
Luk   2015-09-20 18:20:13
Steve 2015-06-20 18:20:13