2012-05-20 3 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; 

это мои таблицы

я пытался, как это, но Im путайте когда Im пытается получить варианты и медиум .. всегда есть более чем один вариант и среда в 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

Вы можете лететь в join_medium left join mediums, и вы получите только одну запись заведений unit_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

, используя этот запрос .. Ошибка запроса и говорят, что столбец «институт_id» в списке полей неоднозначен », после чего я удалил init_id из запроса и снова запустил, тогда я могу получить только 1 строку. Почему это???? есть много данных в моей базе данных ... – thara

+0

неоднозначная ошибка означает, что вы должны префикс всех столбцов в списке SELECT с именем таблицы, когда вы используете объединения. Многие таблицы имеют одинаковые столбцы, и появляется двусмысленность. –

+0

Единственная вещь из-за того, что я использовал GROUP_CONCAT, но я не указал, что для GROUP BY, вы должны GROUP BY mediums.medium_id в этом случае. –

Смежные вопросы