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