簡體   English   中英

MYSQL查詢具有不同字段的兩個表

[英]MYSQL querying two tables with different fields

這是我的搜索查詢,正在發出參數錯誤。
我需要做什么來糾正它。 基本上,我需要將這兩個表放在一起,並在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”行動的歸類

請簽入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");

對兩個表運行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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM