2013-12-23 73 views
0

我使用五個表來存儲項目數據。創建新作業時,我首先希望腳本搜索以查看是否存在具有相同項目編號的項目。這些表格中的每一個都使用「project_number」列作爲索引鍵搜索多個MySQL表

下面是我試圖用來一次搜索五個表的方法,但它無法返回我知道的結果。

$check_project_number = "SELECT * FROM project_details WHERE project_number = ? 
       UNION 
        SELECT * FROM project_crews WHERE project_number = ? 
       UNION 
        SELECT * FROM project_tooling WHERE project_number = ? 
       UNION 
        SELECT * FROM project_scope WHERE project_number = ? 
       UNION 
        SELECT * FROM project_equipment WHERE project_number = ?"; 

$q_check_project_number = $conn->prepare($check_project_number); 
    $q_check_project_number ->execute(array($project_number,$project_number,$project_number,$project_number,$project_number)); 
     $project_count = $q_check_project_number ->rowCount(); 

      if ($project_count > 0) /*if a user exists*/ 
       { 
        print "project exists"; 
       } 

      else 
      { /*insert records*/ 
+0

您收到任何錯誤,你肯定對單個表查詢時,在表(S)的數據存在是否行得通? ,或者只是兩個而不是全部5? – newfurniturey

+4

用'project_number'替換'*'。原因:http://www.w3schools.com/sql/sql_union.asp –

回答

0

當使用UNION,在SELECT語句中指定的列需要將所有的比賽在所有不同的查詢您所使用的UNION標籤。如果它們中的任何一個不同,它將會失敗。我的假設是,您正在查詢的一個或多個表具有1)其他表中不存在的列或2)不同的列名稱

示例(當然,更改select子句以符合您需要從表(S)拉列名:

SELECT project_id, project_number, project_name FROM project_details WHERE project_number = ? 
UNION 
SELECT project_id, project_number, project_name FROM project_crews WHERE project_number = ? 
UNION 
SELECT project_id, project_number, project_name FROM project_tooling WHERE project_number = ? 
UNION 
SELECT project_id, project_number, project_name FROM project_scope WHERE project_number = ? 
UNION 
SELECT project_id, project_number, project_name FROM project_equipment WHERE project_number = ?