MYSQL запрашивает две таблицы с разными полями - PullRequest
1 голос
/ 27 февраля 2012

Вот мой поисковый запрос, который выдает ошибку аргумента.
Что мне нужно сделать, чтобы исправить это.По сути, мне нужно собрать обе эти таблицы вместе и извлечь следующие 5 событий из двух таблиц к дате start.Вы также заметите, что последнее поле в каждой таблице отличается друг от друга.

$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 ]

1 голос
/ 27 февраля 2012

Пожалуйста, отметьте пункт 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");
0 голосов
/ 27 февраля 2012

Запустите операторы SHOW CREATE TABLE для обеих таблиц. Найдите различия между двумя таблицами, проверьте кодировки и параметры сортировки, как предложил Leap Bun. Затем вы можете изменить поле charset / collation или просто попробовать использовать предложение COLLATE в вашем запросе SELECT. Как то так -

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
...