簡體   English   中英

從幾張表中選擇行的最佳方法?

[英]The best way to select rows from several tables?

我正在創建一個php應用程序,現在正在創建數據庫接口代碼。 在我的APP中,它們是三個表:用戶,網絡,用戶網絡。 他們具有以下列:

  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的情況下,如何從網絡數據庫中選擇行呢?

謝謝你的幫助。

您應該改用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'

該查詢將為您提供用戶所屬的所有網絡。

如果您的問題是與數組的比較,那么一個簡單的解決方法是使用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 (?,?,..)子句。

當然使用JOIN作為“ halfdan”表示,是最好的方法。 但我會回答你的問題:

如果您的數組是這樣的:

$ un =數組([0] => 1 [1] => 3 [2] => 5 [3] => 7)//網絡ID = 1、3、5、7

您可以這樣使用Foreach

Foreach($ un as $ key => $ value){

您的查詢將如下所示:

SELECT * FROM network WHERE network_ID ='$ value'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM