0

次の SQL ステートメントがあります。

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;

したがって、明確にするために:

現在、ride_times.ridetms_depart_time に基づいて、depart_times からテキストを取得しています。また、ride_times.ridetms_return_time に基づいて、depart_times からテキストを取得する必要があります。

4

2 に答える 2

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

スキーマに何か問題があるように感じます。でも、それもネーミングを見た僕の勝手な推測です..

于 2013-02-21T07:31:46.360 に答える
0

Ok、

さらに多くの検索を行った後、次の投稿を見つけました。

SELECT * 列の MySQL エイリアス

ステートメントを次のように修正しましたが、適切に機能しています。

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 = ?

私を助けようとしてくれたすべての人に感謝します。

気をつけて、リー

于 2013-02-21T09:02:38.597 に答える