2015-08-21 4 views
0

У меня есть таблица пользователей, у которой есть идентификатор пользователя и несколько транспортных средств, назначенных этому пользователю. Каждое транспортное средство представляет собой целочисленное значение, которое равно идентификатору транспортного средства в отдельной таблице. Я хотел бы получить идентификатор пользователя и марку и модель каждого из транспортных средств, связанных с этим пользователем. Я могу получить идентификатор пользователя и марку и модель одного транспортного средства с помощью следующего запроса:MySQL JOIN, чтобы получить несколько записей из одной таблицы

SELECT users.user_id, vehicles.make, vehicles.model 
FROM users 
JOIN vehicles ON users.vehicle1 = vehicles.vehicle_id 

Я попытался множественным соединяющую, и т.д .. но я не могу заставить его работать.

Любая помощь была бы принята с благодарностью.

Edited включить структуры таблицы:

Я попытался включить их как изображения, но у меня нет достаточного количества сообщений.

Пользователи Таблица

https://www.dropbox.com/s/tbn6e0omn96m41k/users.JPG?dl=0

Транспортные средства Таблица

https://www.dropbox.com/s/8dpr22c9llbzrf2/vehicles.JPG?dl=0

мне нужно, чтобы получить марку и модель ВСЕХ транспортных средств, связанных с пользователем.

+0

Можете ли вы предоставить какие пользователи и транспортные средства таблицы похожи? – FirebladeDan

+0

есть таблица пользователей, таблица транспортных средств и таблица user_has_vehicle, концепция – Drew

+0

Нет изображений. Просто надлежащие DDLs – Strawberry

ответ

0

@ vthokie11 - У Дрю есть хорошая точка. Ваша структура таблицы не очень хорошая. Вы можете обратиться here

я имел бы структуру следующим образом: 1. пользователь таблице:

DROP TABLE IF EXISTS `stacktest`.`user`; 
CREATE TABLE `stacktest`.`user` (
    `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; 

2. автомобиля стол:

DROP TABLE IF EXISTS `stacktest`.`vehicle`; 
CREATE TABLE `stacktest`.`vehicle` (
    `vehicle_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `make` varchar(45) DEFAULT NULL, 
    `model` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`vehicle_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; 

3 . user_vehicle table: (который поддерживает отношения между пользователем и транспортные средства)

DROP TABLE IF EXISTS `stacktest`.`user_vehicle`; 
CREATE TABLE `stacktest`.`user_vehicle` (
    `user_id` int(10) unsigned NOT NULL, 
    `vehicle_id` int(10) unsigned NOT NULL, 
    KEY `FK_user_vehicle_1` (`user_id`), 
    KEY `FK_user_vehicle_2` (`vehicle_id`), 
    CONSTRAINT `FK_user_vehicle_2` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicle` (`vehicle_id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `FK_user_vehicle_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

И теперь вам нужно выполнить этот простой запрос:

SELECT user.user_id, vehicle.make, vehicle.model 
FROM user LEFT JOIN user_vehicle on user_vehicle.user_id=user.user_id 
LEFT JOIN vehicle on vehicle.vehicle_id=user_vehicle.vehicle_id where user.user_id=1; 
0

ВЫБРАТЬ users.user_id, vehicles.make, vehicles.model от пользователей, транспортных средств ГДЕ users.vehicle1 = vehicles.vehicle_id

Примечание: Было бы лучше практика назвать столбец в таблице пользователей vehicle_id поэтому ясно, что это идентификатор в другой таблице и сделать его внешним ключом.

+0

Это делает то, что я включил в мой вопрос – vthokie11

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