在 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)
- ...
问题:
现在,我想为PHP数组中的每个ID选择匹配的名称。我只能想象两种解决方案:
1。 for循环:
foreach ($persons as $person) {
$result = mysql_query("SELECT name FROM personInfo WHERE id = ".$person);
}
2。逻辑运算符OR
$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");
问题:
到目前为止这一切都是正确的吗?如果是:为什么会这样?如果我有第二个表,MySQL查询会更快吗?只有一张桌子,速度非常慢?解决我的问题的最快方法是什么(选择与PHP数组的ID匹配的名称)?
答案 0 :(得分:2)
如果你有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....) )
答案 1 :(得分:2)
如果您有很多ID(数百或更多),将值输入临时表并加入它实际上更快。
您可能想阅读这篇文章: