0

簡単な JOIN クエリがあります。

$lstCheck = $dbWHMCS->query('SELECT * FROM tblmonitorports mp 
                            INNER JOIN tblmonitorhosts h ON h.hst_id = port_mon 
                            INNER JOIN tblhosting ho ON ho.id = h.hst_serverid
                            INNER JOIN tblclients cl ON cl.id = ho.userid');

while ($data = $lstCheck->fetch())
{
            $serveridx = $data['ho.id'];
            $clientid = $data['cl.id'];
}

私の問題は、tblhosting テーブルと tblclients テーブルの両方に「id」列があるため、両方の変数が同じ ID を持つことです。上記の例のエイリアス (ho. と cl.) を使用して設定しようとしましたが、機能しません。上記の例でこれを行うにはどうすればよいですか?

ありがとうございました!

4

2 に答える 2

2

これはどう?(PHP の詳細は少しさびていますが、これで十分です):


$lstCheck = $dbWHMCS->query('SELECT ho.id hid, cl.id cid FROM tblmonitorports mp 
                            INNER JOIN tblmonitorhosts h ON h.hst_id = port_mon 
                            INNER JOIN tblhosting ho ON ho.id = h.hst_serverid
                            INNER JOIN tblclients cl ON cl.id = ho.userid');

while ($data = $lstCheck->fetch())
{
            $serveridx = $data['hid'];
            $clientid = $data['cid'];
}
于 2012-05-11T03:41:03.693 に答える
1

ワイルドカードを使用してレコードを選択している*ため、そのようなフィールドを選択することはできません。

クエリに従って、必要な値h.hst_serveridho.useridまったく同じ値を持っています。SO単純にこれを行う

while ($data = $lstCheck->fetch())
{
            $serveridx = $data['hst_serverid'];
            $clientid = $data['userid'];
}

ただし、特定の行を選択する方が適切に聞こえる場合もあります

$lstCheck = $dbWHMCS->query('SELECT ho.id hid, cl.id cid, ....');

while ($data = $lstCheck->fetch())
{
            $serveridx = $data['hid'];
            $clientid = $data['cid'];
}
于 2012-05-11T03:44:43.660 に答える