質問

私は4つの表を持っています:

  • 文字
  • arena_team
  • arena_table_member
  • arena_team_stats。

文字テーブルにGUID、名前

arena_teamテーブルにはarenateAmid、name、type

があります。

arena_table_memberテーブルにはGUIDがあります(これは文字テーブルと同じです)、ArenateAmid

arena_team_statsテーブルには、ArenateAmid、Fation、Wins、Wins2、Played

キャラクターがあるアリーナチームのリストを取得する方法は?私は試しました:

$result=mysql_query("SELECT 
          characters.guid
           , characters.name
           , arena_team.arenateamid
           , arena_team.name
           , arena_team_stats.rating
           , arena_team_stats.wins
           , arena_team_stats.wins2
           , arena_team_stats.played
           , arena_team.type 
   FROM characters
           , arena_team_stats
           , arena_team 
    WHERE characters.name LIKE '%$q%' 
    AND arena_team.arenateamid = arena_team_stats.arenateamid 
    ORDER BY arena_team_stats.rating DESC") 
or die(mysql_error());
.

しかし、それはArena_teamテーブルにあるすべてのアリーナチームを返します。

役に立ちましたか?

解決

参加を見逃しているように見えます。テーブルエイリアスで読みやすく、フォーマットされている:

    SELECT c.guid
         , c.name
         , at.arenateamid
         , at.name
         , at.type
         , ats.rating
         , ats.wins
         , ats.wins2 
         , ats.played
      FROM characters c
INNER JOIN arena_team_member atm ON atm.guid = c.guid
INNER JOIN arena_team at ON at.arenateamid = atm.arenateamid
INNER JOIN arena_team_stats ats ON ats.arenateamid = at.arenateamid
     WHERE c.name LIKE '%$q%'
  ORDER BY ats.rating DESC
.

他のヒント

は代わりに結合を使うべきです。From Partでカンマ区切りテーブルを使用すると、結果のすべての可能な組み合わせが得られます。

このクエリを試してください(結合を使用):

SELECT c.guid,c.name,a.arenateamid,a.name,
  ts.rating,ts.wins,ts.wins2,
  ts.played,a.type 
 FROM characters c
         JOIN arena_table_member ON arena_table_member.guid=character.guid
  JOIN arena_team a ON arena_table_member.arenateamid = a.arenateamid
  JOIN arena_team_stats ts ON ts.arenateamid = a.arenateamid
 WHERE c.name LIKE '%$q%' 
  AND a.arenateamid = ts.arenateamid 
 ORDER BY ts.rating DESC
.

二つのこと:

  1. ここで別名を使うべきです。(フルテーブル名の代わりに上記のC、A、TSはエイリアスと呼ばれます)

  2. 文字 '?'と正確に一致したい場合は、c.name= 'を使用してください。c.name '%?%'はすべてのC.Namesを返します。それらの中で。

SELECT Char.guid, Chars.name, Teams.arenateamid, Teams.name, Stats.rating,
       Stats.wins, Stats.wins2, Stats.played, Teams.type
FROM characters AS Chars,arena_team_stats AS Stats, arena_team AS Teams,
     arena_table_member AS Members
WHERE Chars.name LIKE '%$q%' AND Teams.arenateamid = Stats.arenateamid AND
      Members.guid = Chars.guid AND Members.arenateamid = Teams.arenateamid
ORDER BY Stats.rating DESC
.

あなたはテーブルの結合を欠いていました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top