0

私はphpとmysqlが初めてで、フォームからユーザーに関する特定のデータを保存し、ユーザーが同様の少し複雑なフォームに基づいて検索できるようにするWebアプリケーションを2日間作成しようとしています。フォームが機能し、データベースにも入力されましたが、mysql からのデータの受信に問題があり、将来的には検索機能にも問題が発生する可能性がありますが、それについてはまだあまり考えていませんでした。現在、その特定のデータを db から取得することに重点を置いています。

SELECT players.*, 
    brackets.name AS interested_in, 
    classes.name AS looking_for,
    tags.name AS tagged_with 
FROM players JOIN player_brackets ON (players.id = player_brackets.player_id) 
JOIN brackets ON (player_brackets.bracket_id = brackets.id) 
JOIN player_classes ON (player_brackets.player_id = player_classes.player_id) 
JOIN classes ON (player_classes.class_id = classes.id) 
JOIN player_tags ON (player_classes.player_id = player_tags.player_id) 
JOIN tags ON (player_tags.tag_id = tags.id) 
WHERE players.id = '18'

私は正常に動作するこのクエリを持っていますが、そこから取得したデータは、データベース内のデータのすべての組み合わせであり、現在は 100 以上の結果がほぼ同じです。その結果を db 内のフィールド数で乗算します。たとえば、プレーヤー (1) * ブラケット (3) * クラス (11) * タグ (5) は、フィールド ブラケット、クラスの違いでほぼ同じデータの 165 行を出力します。とタグ。

その結果をグループ化すると、players.id1 行しか得られませんが、他のフィールドのデータは失われます。すべてを含む1行を取得したい(おそらく、配列内に複数のデータがあるcol)。

DB には、プレーヤー、タグ、クラス、ブラケット、およびプレーヤー ID とタグ/クラス/ブラケット ID の組み合わせを含む 3 つのテーブルの 7 つのテーブルがあります。

私はウェブとSOを検索してきましたが、何も役に立ちませんでした。誰かがこれで私を助けることができればとてもいいです. 返信ありがとうございます。私の母国語ではない下手な英語で申し訳ありません。

4

1 に答える 1

0

参加すると、MySQL はすべての組み合わせを提供します。

見てきたように、GROUP BY はできますが、その場合は 1 つの組み合わせしか得られません。

一連のクエリを探していると思います (「プレーヤー 1 のすべてのブラケットを取得する」、「プレーヤー 1 のブラケット 12 のすべてのクラスを取得する」など)。

または、アプリで結果をインテリジェントに解析できます。

GROUP_CONCAT もありますが、それが誰かのニーズを満たすことはめったにありません (1 つの文字列として返されるため)。

于 2012-11-22T21:03:39.523 に答える