Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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:连接(2个表)与单个查询(1个表)_Php_Mysql_Optimization_Select - Fatal编程技术网

Php MySQL:连接(2个表)与单个查询(1个表)

Php MySQL:连接(2个表)与单个查询(1个表),php,mysql,optimization,select,Php,Mysql,Optimization,Select,在PHP中,我有一个由11人组成的数组,其中只给出了每个人的ID: $persons = array(1, 3, 39, 72, 17, 20, 102, 99, 77, 2, 982); 在我的MySQL数据库中有一个表,其中包含每个人的详细信息: TABLE personInfo - ID (integer) - name (string) - birth date (timestamp) - weight (decimal) - ... 问题: foreach ($perso

PHP中,我有一个由11人组成的数组,其中只给出了每个人的ID

$persons = array(1, 3, 39, 72, 17, 20, 102, 99, 77, 2, 982);
在我的MySQL数据库中有一个表,其中包含每个人的详细信息

TABLE personInfo
 - ID (integer)
 - name (string)
 - birth date (timestamp)
 - weight (decimal)
 - ...
问题:

foreach ($persons as $person) {
    $result = mysql_query("SELECT name FROM personInfo WHERE id = ".$person);
}
现在,我想为PHP数组中的每个ID选择匹配的名称。我只能想象两种解决方案:

1。for循环:

foreach ($persons as $person) {
    $result = mysql_query("SELECT name FROM personInfo WHERE id = ".$person);
}
2。逻辑运算符或

$result = mysql_query("SELECT name FROM personInfo WHERE id = 1 OR id = 3 OR id = 39 OR ...");
两种解决方案都很慢,不是吗

但是如果我有另一个包含PHP数组ID的MySQL表

TABLE ids
 - ID (integer)
。。。我可以使用连接来进行非常快速的MySQL查询,对吗

$result = mysql_query("SELECT a.ID, b.name FROM ids AS a JOIN personInfo AS b ON a.ID = b.ID");
问题:

foreach ($persons as $person) {
    $result = mysql_query("SELECT name FROM personInfo WHERE id = ".$person);
}

到目前为止,所有这些都正确吗?如果是:为什么会这样?如果我有第二个表,MySQL查询会更快吗?因为只有一张桌子,所以速度非常慢?解决我的问题的最快方法是什么(选择与PHP数组ID匹配的名称)?

如果你有ID,你应该只查询你的ID。所以

 $result = mysql_query("SELECT name FROM personInfo WHERE id = 1 OR id = 3 OR id = 39 OR ...");
虽然我会使用

$result = mysql_query("SELECT name FROM personInfo WHERE id IN (1,2,3,4....) )
如果您有很多ID(几百个或更多),那么将这些值输入到临时表并连接它实际上会更快

您可能想阅读本文:


非常感谢!这正是我需要的。因此,对于大约20个参数,两种方法具有相同的性能。但是对于大约500个参数,您应该更喜欢临时表