[英]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.