2017-02-14 12 views
0

私は動作するMySQLのステートメントを持っています - 私は要求されたレコードを得ることができます - movies.* & groups.name複数のテーブルからレコードを選択するPHP/MySQL

$stmt= $mysqli->query("SELECT DISTINCT ebooks.*, groups.name FROM ebooks 
INNER JOIN ebooks_groups ON ebooks.uuid = ebooks_groups.ebookuuid 
INNER JOIN groups_users ON ebooks_groups.groupuuid = groups_users.groupuuid 
INNER JOIN groups ON groups_users.groupuuid = groups.uuid 
WHERE useruuid=".$get_useruuid." 
ORDER BY groups.name"); 

1/ iはgroupsテーブルから別の列を取得する必要が - すなわちgroups.uuid

iは

SELECT DISTINCT movies.*, groups.* FROM movies, groups 

&

SELECT DISTINCT movies.*, groups.name, groups.uuid FROM movies, groups 

それを試しレコードを取得しませんでした。

2/それから私は私の元のコードをもう一度見ていた - ... FROM movies ...を - 私はFROM movies, groupsテーブルを選択していないよ場合はどのようにこれでも働いていますか?

+3

**警告**:mysqliを使用するときは、[パラメータ化されたクエリ](http: //php.net/manual/en/mysqli.quickstart.prepared-statements.php)と['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)をユーザーデータをクエリに追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'や' $ _GET'データを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。 – tadman

+0

MySQLに関する質問は、私の場合は他のすべてのものを忘れて、それに焦点を当てます。したがって、http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sqlを参照してください。 -query – Strawberry

答えて

0

AFAIK、これは純粋なMySQLです。 PHPかどうかは問題になりません。

最初に理解するのは、暗黙的な結合です。 Explicit vs implicit SQL joins このような理解は、問題の少なくとも半分を解決する必要があります。

第2に、私は決してSELECT *をコーディングすることはありません。必要な列だけを選択するのではなく、現在存在するものすべてが必要な場合でも、データベースモデルで作業する場合は、データベースを明示的にリストしないと、コードの更新が必要であることを検出するのがずっと難しくなります。

残りについては、SQLクエリを段階的に段階的に構築します。それはあなたの質問をデバッグするのに大いに役立ちます。実際のテーブルといくつかのサンプルデータを持っているので...

+0

おかげで、これは正しい解決策に私を得ました。「INNER JOIN」は必要なく、テーブル間のカラム名が矛盾していました。 – boomshanka

関連する問題