2012-05-20 95 views
0

我有6個表,需要從這些表中一次檢索一些數據。任何機構可以告訴我,我可以從一個查詢中選擇我的值嗎?從多個表中選擇查詢

我需要這些值。

institute_id 
institute_name 
city_name 
options (relate to institute_id) 
mediums (relate to institute_Id) 

這些是我的表

CREATE TABLE institutes (
    institute_id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT, 
    login_id INT(4) UNSIGNED NOT NULL, 
    address_id INT(4) NOT NULL, 
    contact_id INT(4) NOT NULL, 
    institute_code INT(4) NOT NULL, 
    institute_name VARCHAR(80) NOT NULL, 
    institute_details VARCHAR(80) NOT NULL, 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

CREATE TABLE address (
    address_id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT, 
    address_one VARCHAR(40) NOT NULL, 
    address_two VARCHAR(40) DEFAULT NULL, 
    city_id INT(4) UNSIGNED NOT NULL, 
    PRIMARY KEY (address_id), 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

CREATE TABLE city(
    city_id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT, 
    city_name VARCHAR(30) NOT NULL, 
    state_id INT(2) UNSIGNED NOT NULL, 
    PRIMARY KEY (city_id), 
) ENGINE=MyISAM; 

CREATE TABLE medium(
    medium_id INT(2) UNSIGNED NOT NULL AUTO_INCREMENT, 
    medium_name VARCHAR(30) NOT NULL, 
    PRIMARY KEY (medium_id), 
) ENGINE=MyISAM; 


CREATE TABLE options(
    option_id INT(2) UNSIGNED NOT NULL AUTO_INCREMENT, 
    option_name VARCHAR(60) NOT NULL, 
    PRIMARY KEY (option_id), 
) ENGINE=MyISAM; 


CREATE TABLE institute_medium(
    im_id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT, 
    medium_id INT(2) UNSIGNED NOT NULL, 
    institute_id INT(4) UNSIGNED NOT NULL, 
    PRIMARY KEY (im_id) 
) ENGINE=MyISAM; 

這些都是我的表

我想這樣的,但林混淆時,即時通訊試圖讓選項和媒介..總有一個以上選項和媒體instutite_medium一個機構...

$query = "SELECT 
       institute_id, institute_name, city_name, 
       DATE_FORMAT(registration_date, '%M %e, %Y') AS date 
      FROM 
       institutes 
      INNER JOIN 
       address ON institutes.address_id = address.address_id 
      INNER JOIN 
       city ON address.city_id = city.city_id 
      ORDER BY 
       registration_date DESC"; 

任何意見都是gr吃得津津樂道。

謝謝...

+0

你需要匹配,例如某一特定的選項? –

+0

您可以留下加入institution_medium左連接媒介,並且每個機構只能獲得一個Institution_medium記錄和只有一個媒體記錄。哪一個取決於你的SQL服務器。您可以指定on子句中的哪一個。 –

回答

0

你可以做followng:

SELECT 
      institute_id, institute_name, city_name, 
      DATE_FORMAT(registration_date, '%M %e, %Y') AS date, 
      GROUP_CONCAT(mediums.name SEPARATOR ', ') 
     FROM 
      institutes 
     INNER JOIN 
      address ON institutes.address_id = address.address_id 
     INNER JOIN 
      city ON address.city_id = city.city_id 
     LEFT JOIN 
      institute_medium ON institutes.institute_id = institute_medium.institute_id 
     LEFT JOIN 
      medium ON institute_medium.medium_id = medium.medium_id 
     ORDER BY 
      registration_date DESC 

GROUP_CONCAT(mediums.name分離器 '')將基本破滅所有的媒體名稱。

您可以刪除該組CONCAT並使用mediums.names和使用權聯接那麼你就必須在同一行多次唯一的變化是介質名稱

+0

使用此查詢..查詢失敗,並說字段列表「'institute_id'在字段列表中是不明確的」然後我從查詢中移除institute_id並再次運行,那麼我只能得到1行。爲什麼????我的數據庫中有很多數據... – thara

+0

模糊錯誤意味着當您使用連接時,必須在SELECT列表中使用table_name前綴所有列。許多表格有名稱相同的列,並出現不明確的地方。 –

+0

單行事件是由於我使用了GROUP_CONCAT這一事實,但我沒有指定GROUP BY的內容,因此在這種情況下應該使用GROUP BY mediums.medium_id。 –