从多个表中选择行的最佳方法是什么?

时间:2011-04-13 21:23:04

标签: php mysql sql database pdo

我正在创建一个php应用程序,现在正在创建数据库接口代码。在我的APP中,他们是三个表,用户,网络,user_network。他们有以下columsn:

  user<-------------------->user_network<-------------------->network
user_ID                       un_ID                            network_ID
user_Name                     un_Member                        network_Name
                              un_Network                       network_Description

我创建了以下查询,该查询查询user_network表并返回该用户所属的所有网络的ID:

$STH = $DBH->query("SELECT * FROM user_network WHERE nm_Member ='$userID'");

然后我使用以下代码从此数组中提取network_ID:

$DB_NetworkID = array();
foreach($STH as $row)
{
    $DB_NetworkID[$counter] = $row['nm_networkID'];
    $counter++;
}
print_r($DB_NetworkID);

现在,数组包含用户所属的所有网络ID,如此

Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 )   //network IDs = 1, 3, 5, 7

我现在想从网络表中提取行,我如何从网络数据库中选择行,哪些ID包含在数组中?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您应该使用JOIN而不是单个查询:

SELECT 
    *
FROM 
    user
INNER JOIN
    user_network
ON
    user.user_ID = user_network.un_ID
INNER JOIN
    network
ON 
    user_network.un_Network = network.network_ID
WHERE
    user_ID = '$userID'

该查询将为您提供用户所属的所有网络。

答案 1 :(得分:0)

如果您的问题是与数组进行比较,那么一个简单的解决方法是使用FIND_IN_SET(),如下所示:

$list = implode(",", $DB_NetworkID);   // turns it into "1,3,5,7"

... "SELECT * FROM foo WHERE   FIND_IN_SET(network_ID, '$list')";

为了获得更好的性能,您应该构建一个.. IN (?,?,..)子句。

答案 2 :(得分:0)

当然使用JOIN作为“halfdan”说,是最好的方法。 但我会回答你的问题:

如果你的数组是这样的:

  

$ un =数组([0] =&gt; 1 [1] =&gt; 3 [2] =&gt; 5 [3] =&gt; 7)//网络ID = 1,3,5,7 < / p>

您可以像这样使用Foreach

  

Foreach($ un as $ key =&gt; $ value){

,您的查询将如下:

  

SELECT * FROM network WHERE network_ID ='$ value'