0

これは簡単に解決できるかもしれませんが、このコードに問題があります - 私は独学で PHP の初心者であり、思いついたコードは機能したくないようです。

スポーツ大会のオンラインエントリーシステムのページです。審査員の詳細は「club_judges」テーブルに保存され、ユーザーはそれらを「competition_judges」にコピーすることでコンテストに参加できます。これは、テーブルのチェックボックス フォームを介して行われます。

すでにコンペティションに追加されているジャッジがインポート フォームに表示されないようにする機能を追加したいのですが、コードが機能していないようです。「bg_number」(スポーツの識別番号) の一意のフィールドを使用して、既存のエントリを検索しています。

現在のコード:

$existing_judges = mysql_query("SELECT bg_number FROM competition_judges WHERE competition='Test Competition'");
$existing_judges_fetch = mysql_fetch_array($existing_judges);
$existing_judges_array = "('" . implode( "', '", $existing_judges_fetch ) . "');" ; 

$query = "SELECT * FROM club_judges WHERE (`club`='Test Club') AND (`bg_number` NOT IN '$existing_judges_array') ORDER BY name ";
$result = mysql_query($query) or die(mysql_error());

表示されるエラー:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''('1234567', '1234567');') ORDER BY name' at line 1

参考までに、1234567 は私のテスト審査員の bg_number です。

どんな助けでも大歓迎です!

4

3 に答える 3

0

クエリを 1 つだけ使用しない理由

SELECT * 
FROM club_judges 
WHERE `club`='Test Club' 
AND `bg_number`
NOT IN (SELECT bg_number FROM competition_judges WHERE competition='Test Competition')
ORDER BY name 
于 2013-02-03T16:28:05.667 に答える
0

Use は、次のように代わりに単一のクエリを使用できます。

$query = "SELECT * FROM `club_judges` WHERE `club`='Test Club' 
          AND 
          `bg_number` NOT IN 
              (SELECT `bg_number` FROM `competition_judges` WHERE `competition`='Test Competition')
           ORDER BY `name` ";
$existing_judges_fetch = mysql_fetch_array($existing_judges);
$result = mysql_query($query) or die(mysql_error());
于 2013-02-03T16:28:17.117 に答える
0

ここにJOINバージョンがあります

SELECT  a.*
FROM    club_judges a
        LEFT JOIN competition_judges b
            ON  a.bg_number = b.bg_number AND
                b.competition='Test Competition'
WHERE   b.bg_number IS NULL AND
        a.club = 'Test Club'
ORDER   BY a.name

結合に関する知識を完全に得るには、以下のリンクにアクセスしてください。

于 2013-02-03T16:29:46.100 に答える