MYSQL запрашивает две таблицы с разными полями

Вот мой поисковый запрос, который выдает ошибку аргумента.
Что мне нужно сделать, чтобы исправить это. По сути, мне нужно собрать обе эти таблицы вместе и извлечь следующие 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: Неверное сочетание параметров сортировки для операции "СОЮЗ"

2 ответа

Решение

Запустите операторы 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

Пожалуйста, проверьте в ГДЕ пункт. Используйте 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");
Другие вопросы по тегам