1

这是我的搜索查询,它输出了一个参数错误。
我需要做什么来纠正它。基本上我需要将这两个表放在一起,并在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”操作的排序规则的非法混合

4

2 回答 2

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");
于 2012-02-27T03:57:32.193 回答
0

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