2

私は現在このコードを持っています。

            switch($search_topic)
            {
                case 'Title':
                    $stmt = $dbh->prepare("SELECT game_id, title, platform_name, author_name, price
                                            FROM games 
                                            WHERE title 
                                            LIKE :search_term");
                break;

                case 'Platform':
                    $stmt = $dbh->prepare("SELECT game_id, title, platform_name, author_name, price
                                            FROM games 
                                            INNER JOIN platforms ON games.platform_id = author.platform_id
                                            WHERE platform_name LIKE :search_term");
                break;
            }

search_topic変数は前のWebページのリストボックスから取得されます。タイトル検索は、1つのMySQLテーブルを検索するだけで正しく機能します。複数のテーブルを検索しようとしているので、プラットフォームの検索は少し難しいです。それが理にかなっている場合。

ゲームテーブルには「platform_id」という列があります。これはプラットフォームテーブルにリンクしており、キーフィールドはその下にあるプラットフォームにリンクしています。では、ゲームテーブルから「platform_id」を取得し、それを「platforms」にリンクして、「platform_title」を取得し、それを使用して検索するにはどうすればよいでしょうか。

スキーマ:http ://sqlfiddle.com/#!2 / 3d3e3 / 6

4

2 に答える 2

3

あなたのフィドルに基づいて、ここにあなたのためのアップデートがあります:

SELECT g.game_id, g.title, p.platform_name, a.author_name, g.price
FROM games g
INNER JOIN platforms p ON p.platform_id = g.platform_id
INNER JOIN author a ON a.author_id = g.author_id
WHERE g.title LIKE 'Skyrim';

明らかにWHERE g.title LIKE 'Skyrim';、フィルタリングしたいフィールドに変更します。したがって、プラットフォームクエリは次のようになります。

SELECT g.game_id, g.title, p.platform_name, a.author_name, g.price
FROM games g
INNER JOIN platforms p ON p.platform_id = g.platform_id
INNER JOIN author a ON a.author_id = g.author_id
WHERE p.platform_name LIKE 'Xbox';

また、これが本番データベースの設定を反映していると仮定して、CHARSETをlatin1ではなくutf8に変更することをお勧めします。

于 2013-01-16T22:37:02.957 に答える
2
SELECT games.game_id, 
games.title, 
games.platform_name, 
games.author_name, 
games.price, 
games.platform_id, 
platforms.platform_id,
platforms.platform_name
FROM games, platforms 
WHERE
games.platform_id = platforms.platform_id
AND
platform.platform_name LIKE %:search_term%
于 2013-01-16T22:36:46.833 に答える