1

シンプルなデータベース設定

テーブル: クライアント フィールド: clientId(autoinc/primary)、customerId、clientName

テーブル: プロジェクト フィールド: projectId(autoinc/primary)、customerId、projectName

table:items フィールド: itemId(autoinc/primary)、customerId、itemName

クエリ:

include('includes/conn.inc.php'); 
$query = "SELECT customerId 
         FROM items, projects, clients 
         WHERE customerId= 135";
$stmt = $mysql->prepare ($query);
$stmt->execute();
$stmt->bind_result($customerId);

while($row = $stmt->fetch()) : 
      echo $customerId;
endwhile; $stmt->close();

質問: クエリの何が問題になっていますか? 優しくしてください、私は初めて結合を理解しようとしています。私はさまざまな方法を試しましたが、どれもうまくいきませんでした. 各テーブルには対応するエントリ (customerId=135) があるため、クエリが機能する場合、そのうちの 3 つが返されると予想されます。エラー: 非オブジェクトで execute を呼び出しています

事前にみんなに感謝

- - - - アップデート

助けてくれてありがとう!私は実際にこのクエリを使用して動作させました:

        SELECT clients.customerId, projects.customerId, items.customerId 
        FROM clients, projects, items 
        WHERE  clients.customerId = projects.customerId AND   
        projects.customerId = items.customerId;

特に最終的にはちょっと不格好に思えますが。誰かが「WHERE table.column = table.column = table column」の省略形を知っていれば、それらがすべて同じ値であることを考えると優れています。

4

4 に答える 4

1

まあ、結合はありません。少なくとも、これらのテーブル間の暗黙的な関係を次のように定義する必要があります。

SELECT customerId 
FROM items, projects, clients 
WHERE clients.customerId = projects.customerId
AND items.customerId = projects.customerId
AND clients.customerId= 135

ただし、次のように明示的な結合を使用する必要があります。

SELECT client.customerId
FROM clients
LEFT JOIN projects ON projects.customerId = clients.customerId
LEFT JOIN items ON items.customerId = clients.customerId
WHERE clients.customerId = 135
于 2012-10-04T21:04:28.230 に答える
0

何か不足している可能性がありますが、クエリのどこにも明示的に参加していません。代わりに、各列の各行が他のテーブルの各行と結合されます。

abc、123、および !@# を含む 3 つのテーブルがある場合、次のようになります。

a   1   !
a   1   @
a   1   #
a   2   !
...

適切に参加するには、次のようなことをしたいでしょう

select customerId
from clients c
join project p on p.customerId = c.id
join items   i on i.customerId = c.id
where customerId = 135;

ただし、顧客 ID の where 句を指定し、顧客 ID も選択すると、count(p) * count(i) 行が返され、それぞれに顧客 ID 135 のみが含まれます。

于 2012-10-04T21:05:26.373 に答える
0

このように、テーブルに結合条件を指定する必要があります

SELECT customerId 
     FROM items i, projects p, clients c
     WHERE i.customerId = p.customerId AND p.customerId = c.customerId 
        AND customerId= 135

上記は、等しいテーブルの行をマージしますcustomerId

于 2012-10-04T21:06:40.540 に答える