1

これが私の検索クエリで、引数エラーが発生しています。
それを修正するにはどうすればよいですか。基本的に、これらのテーブルの両方をまとめて、start日付までに 2 つのテーブル内の次の 5 つのイベントを引き出す必要があります。また、各テーブルの最後のフィールドが互いに異なることにも注意してください。

$CEsql = mysql_query("
  SELECT id, title, start, end, allDay
  FROM calendar 
  WHERE mem_id='$logOptions_id' 
    AND start >= DATE_SUB( CURDATE( ) ,INTERVAL 0 MONTH ) 
  
  UNION ALL 

  SELECT id, title, start, end, allDay
  FROM team_calendar 
  WHERE team_id IN ($team_array) 
    AND start >= DATE_SUB( CURDATE( ) ,INTERVAL 0 MONTH ) 
  ORDER BY start ASC LIMIT 5");

MYSQL 5.0 と PHP を使用しています。

アップデート

mysql_error表示:

1267 : 操作 'UNION' の照合順序が正しくありません

4

2 に答える 2

1

WHERE句にチェックを入れてください。id2 ではなく mem_id を使用します。id2 は単なるエイリアスであり、フィールド名ではありません。

$CEsql = mysql_query("
  SELECT id, title, start, end, allDay, mem_id as id2 
  FROM calendar 
  WHERE mem_id='$logOptions_id' 
    AND start >= DATE_SUB( CURDATE( ) ,INTERVAL 0 MONTH ) 

  UNION ALL 

  SELECT id, title, start, end, allDay, team_id as id2 
  FROM team_calendar 
  WHERE team_id IN ($team_array) 
    AND start >= DATE_SUB( CURDATE( ) ,INTERVAL 0 MONTH ) 
  ORDER BY start ASC LIMIT 5");
于 2012-02-27T03:57:32.193 に答える
0

両方のテーブルに対してSHOWCREATETABLEステートメントを実行します。Leap Bunが提案したように、2つのテーブルの違いを見つけ、文字セットと照合を確認します。次に、フィールドの文字セット/照合を変更するか、SELECTクエリでCOLLATE句を使用してみてください。このようなもの -

SELECT id, title, start, end, allDay
  FROM calendar 
  WHERE mem_id='$logOptions_id' 
    AND start >= DATE_SUB( CURDATE( ) ,INTERVAL 0 MONTH ) 

  UNION ALL 

  SELECT id, 
    title COLLATE collation_name AS title, -- write your collation here
    start, end, allDay
  FROM team_calendar 
  WHERE team_id IN (1,2) 
    AND start >= DATE_SUB( CURDATE( ) ,INTERVAL 0 MONTH ) 
  ORDER BY start ASC LIMIT 5
于 2012-02-27T07:52:44.263 に答える