2014-02-28 68 views
0

我有這個疑問:更新查詢中使用連接表

$sql ="SELECT * FROM card c JOIN driver d ON c.referred_as=d.referred_as WHERE d.ID='$id'"; 

它需要進行更新,以包括第三表,該表包含驅動程序和卡ID的來自各個表連接表。表1稱爲card。是重要的領域是:

state_id - 此表有3個值(1,2,3) associated_driver - 上driver表稱爲referred_as //而不是表的實際組成部分。由第3表創建 referred_as - 在driver上調用associated_card表 表2調用driver

是重要的領域是: ID - 表 associated_card的自動遞增值 - 有一個值,通常一些數量e.g 123555 //實際上並不是表的一部分。

創建由第三臺 referred_as - 驅動程序的名稱()卡表稱爲associated_driver

忘了加入這個表:

表3被稱爲card_driver。這是很重要的領域是:

driver_id - 從連接到卡 card_id驅動器表中的id - 從鏈接到司機

我希望發生什麼卡表中的id:

當用戶從driver表中輸入他們的ID時,它將比較兩個表具有的字段,即associated_card字段(在卡表上稱爲referred_as)。

associated_card來自連接表,我不知道如何進入查詢。

歡迎任何幫助。如果你需要我解釋一下,我會的。

-- 
-- Table structure for table `card` 
-- 

CREATE TABLE IF NOT EXISTS `card` (
    `id` int(11) NOT NULL auto_increment, 
    `startdate` date NOT NULL, 
    `enddate` date NOT NULL, 
    `state_id` int(11) NOT NULL, 
    `referred_as` varchar(40) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 


-- 
-- Table structure for table `card_driver` 
-- 

CREATE TABLE IF NOT EXISTS `card_driver` (
    `card_id` int(11) NOT NULL, 
    `driver_id` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 


-- 
-- Table structure for table `driver` 
-- 

CREATE TABLE IF NOT EXISTS `driver` (
    `id` int(11) NOT NULL auto_increment, 
    `title` varchar(40) default NULL, 
    `supplier_id` int(11) NOT NULL, 
    `referred_as` varchar(40) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; 

一些圖片:

This is the driver table This is the card table

+0

如果你分享你的表格模式,這將很容易理解 – sunk

+0

你的意思是來自sql文件的東西嗎? – Lazis002

+0

看看這個問題是否有幫助:http://stackoverflow.com/questions/8057565/mysql-update-statement-inner-join-tables – Maximus2012

回答

0

card_driver表似乎實現你的card表和你driver錶行之間的許多一對多的關係。像這樣的表通常被稱爲連接表

加入類似這樣的表格顯示兩個所謂詳細信息表之間的關係,在這種情況下carddriver

對不起,我不明白你在你的兩個細節表中描述你的referred_as列的意思。

我想你要求的所有card項目是與一個特定的driver有關。你可以得到那種結果是這樣的:

SELECT card.id, card. startdate, card.enddate, card.state_id, card.referred_as, 
     driver.id AS driverid, driver.title, driver.supplier_id, 
     driver.referred_as 
    FROM driver 
    LEFT JOIN card_driver ON card.id = card_driver.driver_id 
    LEFT JOIN card  ON card_driver.card_id = card.id 
WHERE driver.id = '$id' 

這會給你通過在card_driver表中的許多一對多的關係,每個分配給該驅動器卡一行。每行將包含有關驅動程序和卡的信息。

正如您所看到的,它通過加入連接表,然後加入其他詳細信息表起作用。

專業提示:請勿在生產軟件中使用SELECT *;你明確選擇從查詢返回的列需要更好。

+0

我將添加卡片和驅動器表格的一些屏幕截圖,以便您更好地理解引用的列。查詢劑量也起作用。錯誤 - #1066 - 不是唯一的表/別名:'驅動程序' – Lazis002

+0

哎呀,抱歉在我的查詢錯字。 –