简体   繁体   English

从多个表中选择查询

[英]Select query from multiple tables

I have 6 tables and need to retrieve some data at once from those tables. 我有6个表,需要立即从这些表中检索一些数据。 can any body tell me, can I select my values from one query. 谁能告诉我,我可以从一个查询中选择我的值吗?

These values I needed. 我需要这些值。

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

These are from my tables 这些是我桌子上的

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;

those are my tables 那是我的桌子

I tried like this but Im confuse when Im try to get options and mediums.. there are always more than one option and medium in instutite_medium to one institute... 我尝试过这种方法,但是当我尝试获取选项和媒介时,我感到困惑。在一个研究所中,在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";

any comments are greatly appreciated. 任何意见,不胜感激。

thank you... 谢谢...

You could do the 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

Will GROUP_CONCAT(mediums.name SEPARATOR ', ') will basically implode all the medium names. GROUP_CONCAT(mediums.name SEPARATOR',')将基本上内爆所有媒介名称。

You could drop the group concat and use mediums.names and use right joins then you'll have the same row multiple times the only variation being the medium name 您可以删除组concat并使用mediums.names并使用右连接,然后多次使用同一行,唯一的变化是medium名称

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM