2013-02-21 2 views
0

У меня есть следующий SQL заявление:Добавляемых данные из одной таблицы на основе 2-х значений

SELECT user_accounts.uacc_id, 
     user_accounts.uacc_username, 
     ride_rides.ride_type, 
     ride_rides.ride_num_seats, 
     ride_rides.ride_price_seat, 
     ride_rides.ride_accept_nm, 
     ride_rides.ride_split_cost, 
     ride_rides.ride_from, 
     ride_rides.ride_from_lat, 
     ride_rides.ride_from_lng, 
     ride_rides.ride_to, 
     ride_rides.ride_to_lat, 
     ride_rides.ride_to_lng, 
     user_profiles.upro_image_name, 
     ride_times.ridetms_id, 
     ride_times.ridetms_return, 
     ride_times.ridetms_depart_date, 
     ride_times.ridetms_depart_time, 
     ride_times.ridetms_return_date, 
     ride_times.ridetms_return_time, 
     depart_times.dpttme_text 
FROM ride_times 
    LEFT JOIN ride_rides 
     ON ride_rides.ride_id = ride_times.ridetms_ride_fk 
    LEFT JOIN user_accounts 
     ON ride_rides.ride_uacc_fk = user_accounts.uacc_id 
    LEFT JOIN user_profiles 
     ON user_profiles.upro_uacc_fk = user_accounts.uacc_id 
    LEFT JOIN depart_times 
     ON depart_times.dpttme_id = ride_times.ridetms_depart_time 
WHERE ride_times.ridetms_id = ?" 

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

Кроме того, 100 пунктов пирожных за любые отзывы о любых вопиющих ошибках в этом вызове. Это моя первая попытка использовать JOIN.

позаботятся, подветренной

Благодаря ответам, которые я получил до сих пор. Вот структура таблиц, участвующих:

CREATE TABLE `depart_times` (
`dpttme_id` int(11) NOT NULL, 
    `dpttme_text` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`dpttme_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 


CREATE TABLE `ride_rides` (
    `ride_id` int(11) NOT NULL AUTO_INCREMENT, 
    `ride_uacc_fk` int(11) NOT NULL, 
    `ride_date_added` timestamp NULL DEFAULT CURRENT_TIMESTAMP, 
    `ride_type` tinyint(4) DEFAULT NULL, 
    `ride_from` varchar(200) DEFAULT NULL, 
    `ride_from_lat` float(10,6) DEFAULT NULL, 
    `ride_from_lng` float(10,6) DEFAULT NULL, 
    `ride_to` varchar(200) DEFAULT NULL, 
    `ride_to_lat` float(10,6) DEFAULT NULL, 
    `ride_to_lng` float(10,6) DEFAULT NULL, 
    `ride_num_seats` tinyint(4) DEFAULT NULL, 
    `ride_price_seat` float DEFAULT NULL, 
    `ride_accept_nm` tinyint(1) DEFAULT '0' COMMENT 'accept non-monetary items', 
    `ride_split_cost` tinyint(1) DEFAULT '0', 
    `ride_notes` longtext, 
    PRIMARY KEY (`ride_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=34 DEFAULT CHARSET=latin1; 



CREATE TABLE `ride_times` (
    `ridetms_id` int(11) NOT NULL AUTO_INCREMENT, 
    `ridetms_ride_fk` int(11) DEFAULT NULL, 
    `ridetms_date_added` timestamp NULL DEFAULT CURRENT_TIMESTAMP, 
    `ridetms_depart_date` date NOT NULL DEFAULT '0000-00-00', 
    `ridetms_depart_time` tinyint(4) DEFAULT '0', 
    `ridetms_return` tinyint(1) DEFAULT '0', 
    `ridetms_return_date` date NOT NULL DEFAULT '0000-00-00', 
    `ridetms_return_time` tinyint(4) DEFAULT '0', 
    PRIMARY KEY (`ridetms_id`) 
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1; 



CREATE TABLE `user_accounts` (
    `uacc_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `uacc_group_fk` smallint(5) unsigned NOT NULL, 
    `uacc_email` varchar(100) NOT NULL, 
    `uacc_username` varchar(15) NOT NULL, 
    `uacc_password` varchar(60) NOT NULL, 
    `uacc_ip_address` varchar(40) NOT NULL, 
    `uacc_salt` varchar(40) NOT NULL, 
    `uacc_activation_token` varchar(40) NOT NULL, 
    `uacc_forgotten_password_token` varchar(40) NOT NULL, 
    `uacc_forgotten_password_expire` datetime NOT NULL, 
    `uacc_update_email_token` varchar(40) NOT NULL, 
    `uacc_update_email` varchar(100) NOT NULL, 
    `uacc_active` tinyint(1) unsigned NOT NULL, 
    `uacc_suspend` tinyint(1) unsigned NOT NULL, 
    `uacc_fail_login_attempts` smallint(5) NOT NULL, 
    `uacc_fail_login_ip_address` varchar(40) NOT NULL, 
    `uacc_date_fail_login_ban` datetime NOT NULL COMMENT 'Time user is banned until due to repeated failed logins', 
    `uacc_date_last_login` datetime NOT NULL, 
    `uacc_date_added` datetime NOT NULL, 
    PRIMARY KEY (`uacc_id`), 
    UNIQUE KEY `uacc_id` (`uacc_id`), 
    KEY `uacc_group_fk` (`uacc_group_fk`), 
    KEY `uacc_email` (`uacc_email`), 
    KEY `uacc_username` (`uacc_username`), 
    KEY `uacc_fail_login_ip_address` (`uacc_fail_login_ip_address`) 
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=latin1; 



CREATE TABLE `user_profiles` (
    `upro_id` int(11) NOT NULL AUTO_INCREMENT, 
    `upro_uacc_fk` int(11) NOT NULL, 
    `upro_name` varchar(100) DEFAULT NULL, 
    `upro_blackberry_id` varchar(200) DEFAULT NULL, 
    `upro_yahoo_id` varchar(200) DEFAULT NULL, 
    `upro_skype_id` varchar(200) DEFAULT NULL, 
    `upro_gmail_id` varchar(200) DEFAULT NULL, 
    `upro_image_name` varchar(200) DEFAULT 'default.jpg', 
    PRIMARY KEY (`upro_id`), 
    UNIQUE KEY `upro_id` (`upro_id`), 
    KEY `upro_uacc_fk` (`upro_uacc_fk`) USING BTREE 
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=latin1; 

Итак, чтобы уточнить:

Сейчас я вытягивать текст из depart_times на основе ride_times.ridetms_depart_time. Мне нужно также вытащить текстовую форму from_de_times на основе ride_times.ridetms_return_time.

+1

Какой столбец вы хотите присоединиться к какой другой? Предоставьте дополнительную информацию. – sdespont

+0

Я не уверен, что вы просите. Прямо сейчас, он вытягивает значение от ride_times.depart_time и затем присоединяется к текстовому представлению этого значения из таблицы, называемой Depart_times. Что мне нужно сделать сейчас, это объединить данные from_de_times на основе значения, выведенного из файла ride_times.return_time (который в настоящее время не находится в SQL, который я опубликовал, потому что я не уверен, как его поместить). –

+0

Pl обеспечивает структуру вашей таблицы – Meherzad

ответ

0

Хорошо,

После УЧАСТКОВ более поиска, я нашел этот пост:

MySQL alias for SELECT * columns

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

SELECT user_accounts.uacc_id, 
         user_accounts.uacc_username, 
         ride_rides.*, 
         user_profiles.upro_image_name, 
         ride_times.*, 
         dpt1.dpttme_text AS dep_text, 
         dpt2.dpttme_text AS ret_text 
       FROM ride_times 
        LEFT JOIN ride_rides 
         ON ride_rides.ride_id = ride_times.ridetms_ride_fk 
        LEFT JOIN user_accounts 
         ON ride_rides.ride_uacc_fk = user_accounts.uacc_id 
        LEFT JOIN user_profiles 
         ON user_profiles.upro_uacc_fk = user_accounts.uacc_id 
        LEFT JOIN depart_times AS dpt1 
         ON dpt1.dpttme_id = ride_times.ridetms_depart_time 
        LEFT JOIN depart_times AS dpt2 
         ON dpt2.dpttme_id = ride_times.ridetms_return_time 
       WHERE ride_times.ridetms_id = ? 

Большое спасибо всем, кто пытался мне помочь.

позаботятся, подветренной

+0

Также ... Престижность тому, кто предложил изменения в моем форматировании SQL. Это помогло мне увидеть ответ. –

0

Я думаю, если вы присоединились все столы уже, просто поставить условие с условием WHERE как:

WHERE 
ride_times.ridetms_id = ? 
AND 
depart_times.column_name1 = ride_times.return_time 

это ответ на ваш вопрос?

Ну, я должен указать следующую строку:

LEFT JOIN depart_times ON depart_times.dpttme_id = ride_times.ridetms_depart_time 

Просто чувствует себя, что-то не так с этой схемой. Но, это также предположение с моей стороны видя namings ..

+0

Спасибо за ваш ответ. Возможно. Как я уже сказал, это моя первая попытка использовать соединения. Я опубликовал структуру используемых таблиц. –

+0

Которая колонка u хочу вместо моих дней.column_name1? –

+0

Я не хочу заменять данные, скорее, я пытаюсь выяснить, как получить доступ к элементу off_times во второй раз. Прямо сейчас он возвращает значение в файле_de_times.dpttms_txt на основе ride_times.ridetms_depart_time. Мне нужно, чтобы во второй раз выходите на exit_times и возвращаете текст на основе значения ride_times.ridetms_return_time. –

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