MYSQL查询具有不同字段的两个表

时间:2012-02-27 03:49:42

标签: php mysql mysql-error-1267

这是我的搜索查询,它发出了一个参数错误 我需要做些什么来纠正它。基本上我需要将这两个表放在一起,并在start日期之前拉出两个表中的下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'的非法混合排序

2 个答案:

答案 0 :(得分:1)

请检查WHERE子句。使用mem_id而不是id2。 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");

答案 1 :(得分:0)

为两个表运行SHOW CREATE TABLE语句。查找两个表之间的差异,检查字符集和排序规则,如Leap Bun建议的那样。然后,您可以更改字段charset / collat​​ion,或者只是尝试在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