簡體   English   中英

左聯接無法正常工作

[英]left join not working correctly

我離開了加入消息的回復,轉到主消息上,但是當我離開加入時,用戶表沒有被加入:

"SELECT messages.*, 
       message_replies.message_reply_message AS message_body 
FROM   messages 
       LEFT JOIN users 
              ON messages.message_user = users.user_id 
       LEFT JOIN message_replies 
              ON messages.message_id = message_replies.message_reply_main 
       LEFT JOIN user_personal_information 
              ON messages.message_user = 
                 user_personal_information.user_personal_information_user" .                   
                 $user . " " . $order . "" 

當我刪除時:

messages.*, 
   message_replies.message_reply_message AS message_body 

並選擇*然后它可以正常工作,但是不包括我的消息回復,這是我的php:

$messages = MessageModel::messages($user," WHERE message_user=? "," AND message_deleted=0 AND message_permdeleted=0   ORDER BY message_date DESC LIMIT 5");

和我的消息SQL:

CREATE TABLE IF NOT EXISTS `messages` (
  `message_id` int(11) NOT NULL,
  `message_user` int(11) NOT NULL,
  `message_subject` varchar(100) NOT NULL,
  `message_body` text NOT NULL,
  `message_to` int(11) NOT NULL,
  `message_read` int(1) NOT NULL DEFAULT '0',
  `message_date` datetime NOT NULL,
  `message_deleted` int(11) NOT NULL DEFAULT '0',
  `message_permdeleted` int(11) NOT NULL DEFAULT '0',
  `message_type` varchar(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;

INSERT INTO `messages` (`message_id`, `message_user`, `message_subject`, `message_body`, `message_to`, `message_read`, `message_date`, `message_deleted`, `message_permdeleted`, `message_type`) VALUES
(1, 3, 'test', 'hello', 12, 1, '2015-10-12 02:09:51', 0, 0, 'sent'),

和我的留言回復:

CREATE TABLE IF NOT EXISTS `message_replies` (
  `message_reply_id` int(11) NOT NULL,
  `message_reply_user` int(11) NOT NULL,
  `message_reply_main` int(11) NOT NULL,
  `message_reply_message` text NOT NULL,
  `message_reply_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1;

INSERT INTO `message_replies` (`message_reply_id`, `message_reply_user`, `message_reply_main`, `message_reply_message`, `message_reply_date`) VALUES
(1, 3, 1, 'Hello, this is just a test reply\r\n', '2015-09-29 18:42:23'),

用戶sql:

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(11) NOT NULL,
  `user_username` varchar(25) NOT NULL,
  `user_email` varchar(100) NOT NULL,
  `user_password` varchar(255) NOT NULL,
  `user_enabled` int(1) NOT NULL DEFAULT '1',
  `user_staff` varchar(15) NOT NULL DEFAULT '',
  `user_account_type` varchar(20) NOT NULL DEFAULT '0',
  `user_registerdate` date NOT NULL,
  `user_twofactor` int(11) NOT NULL DEFAULT '0',
  `user_twofackey` varchar(255) NOT NULL,
  `user_forgot_email_code` varchar(255) NOT NULL,
  `user_emailverified` varchar(25) NOT NULL DEFAULT 'unverified',
  `user_banned` varchar(25) NOT NULL DEFAULT 'unbanned',
  `user_has_avatar` int(11) NOT NULL DEFAULT '0',
  `user_has_banner` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`user_id`, `user_username`, `user_email`, `user_password`, `user_enabled`, `user_staff`, `user_account_type`, `user_registerdate`, `user_twofactor`, `user_twofackey`, `user_forgot_email_code`, `user_emailverified`, `user_banned`, `user_has_avatar`, `user_has_banner`) VALUES
(3, 'lol', 'email@mail.com', '$2y$10$jjTLGiOC2XtwhzRrLOq15euw4S0jXmWveEctd9pYEL44LEt3Vdfa2', 1, 'admin', 'Business', '2015-07-21', 0, '5GILYNBWBXVAUV3A', 'd71a30cb75faed7c48cba971cf934922', 'unverified', 'unbanned', 1, 1),

因此,如何使我的sql與上面提供的信息一起使用?

的var_dump:

array(5){[0] => object(stdClass)#22(10){[“” message_id“] => string(2)” 10“ [” message_user“] => string(1)” 3“ [” message_subject“] => string(8)” yooooooo“ [” message_body“] => string(5)” fffff“ [” message_to“] => string(2)” 12“ [” message_read“] => string(1 )“ 1” [“ message_date”] =>字符串(19)“ 2015-10-12 03:36:32” [“ message_deleted”] =>字符串(1)“ 0” [“ message_permdeleted”] =>字符串( 1)“ 0” [“ message_type”] =>字符串(8)“已接收”} [1] => object(stdClass)#23(10){[“” message_id“] =>字符串(2)” 10“ [ “ message_user”] =>字符串(1)“ 3” [“ message_subject”] =>字符串(8)“ yooooooo” [“ message_body”] =>字符串(3)“ lol” [“ message_to”] =>字符串( 2)“ 12” [“ message_read”] =>字符串(1)“ 1” [“ message_date”] =>字符串(19)“ 2015-10-12 03:36:32” [“ message_deleted”] =>字符串(1)“ 0” [“ message_permdeleted”] =>字符串(1)“ 0” [“ message_type”] =>字符串(8)“已接收”} [2] => object(stdClass)#24(10){ [“ message_id”] =>字符串(1)“ 9” [“ message_user”] =>字符串(1)“ 3” [“ message_subject”] =>字符串(8)“ jhjhjhjh” [“ message_body”] => NULL [ “ message_to”] =>字符串(2)“ 12” [“ message_read”] =>字符串(1)“ 1” [“ message_date”] =>字符串(19)“ 2015-10-12 03:34:54” [“ message_deleted”] =>字符串(1)“ 0” [“ message_permdeleted”] =>字符串(1)“ 0” [“ message_type”] =>字符串(4)“已發送”} [3] =>對象( stdClass)#25(10){[“” message_id“] =>字符串(1)” 8“ [” message_user“] =>字符串(1)” 3“ [” message_subject“] =>字符串(8)” jhjhjhjh“ [“ message_body”] => NULL [“ message_to”] =>字符串(2)“ 12” [“ message_read”] =>字符串(1)“ 0” [“ message_date”] =>字符串(19)“ 2015- 10-12 03:34:40“ [” message_deleted“] => string(1)” 0“ [” message_permdeleted“] => string(1)” 0“ [” message_type“] => string(4)”已發送“} [4] => object(stdClass)#26(10){[”“ message_id”] => string(1)“ 7” [“ message_user”] => string(1)“ 3” [“ message_subject”] =>字符串(2)“ yo” [“ message_body”] => NULL [“ message_to”] =>字符串(2)“ 12” [“ message_read”] =>字符串(1)“ 0” [“ message_date”] =>字符串(19)“ 2015-10-12 03:33:17” [“ message_deleted”] =>字符串(1)“ 0” [“ message_permdeleted”] =>字符串(1)“ 0” [“ message_type” ] => strin g(4)“已發送”}}

user_personal_information

CREATE TABLE IF NOT EXISTS `user_personal_information` (
  `user_personal_information_id` int(11) NOT NULL,
  `user_personal_information_user` int(11) NOT NULL,
  `user_firstname` varchar(75) NOT NULL,
  `user_surname` varchar(75) NOT NULL,
  `user_birthdate` date NOT NULL,
  `user_age` int(11) NOT NULL,
  `user_gender` varchar(25) NOT NULL,
  `user_contactemail` varchar(75) NOT NULL,
  `user_telephone` varchar(75) NOT NULL,
  `user_mobile` varchar(75) NOT NULL,
  `user_introduction` text NOT NULL,
  `user_occupation` varchar(75) NOT NULL,
  `user_relocate` varchar(75) NOT NULL,
  `user_available` varchar(75) NOT NULL,
  `user_fax` varchar(100) NOT NULL,
  `user_street` varchar(100) NOT NULL,
  `user_zip` varchar(100) NOT NULL,
  `user_city` varchar(100) NOT NULL,
  `user_state` varchar(100) NOT NULL,
  `user_country` varchar(75) NOT NULL,
  `user_personal_information_chestsize` varchar(11) NOT NULL,
  `user_personal_information_waistsize` varchar(11) NOT NULL,
  `user_personal_information_bootsize` varchar(11) NOT NULL,
  `user_personal_information_harness_size` varchar(11) NOT NULL,
  `user_personal_information_inside_leg` varchar(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `user_personal_information`
--

INSERT INTO `user_personal_information` (`user_personal_information_id`, `user_personal_information_user`, `user_firstname`, `user_surname`, `user_birthdate`, `user_age`, `user_gender`, `user_contactemail`, `user_telephone`, `user_mobile`, `user_introduction`, `user_occupation`, `user_relocate`, `user_available`, `user_fax`, `user_street`, `user_zip`, `user_city`, `user_state`, `user_country`, `user_personal_information_chestsize`, `user_personal_information_waistsize`, `user_personal_information_bootsize`, `user_personal_information_harness_size`, `user_personal_information_inside_leg`) VALUES
(1, 3, 'name', '123', '0000-00-00', 0, '', '', '07000', '00000', 'hello\r\n', 'Looking for work', '', '', '', '  jfkfkfjk', 'kjkjkjkj', 'kjkjkjk', 'kjkjk', 'United Kingdom', '123', '0', '0', '0', '0'),

嘗試這個。 將用戶放在左加入的第一位

"SELECT messages.*, 
       message_replies.message_reply_message AS message_body 
FROM   users 
       LEFT JOIN messages 
              ON messages.message_user = users.user_id 
       LEFT OUTER JOIN message_replies 
              ON messages.message_id = message_replies.message_reply_main 
       LEFT JOIN user_personal_information 
              ON messages.message_user = 
                 user_personal_information.user_personal_information_user" .                   
                 $user . " " . $order . "" 

對消息表使用表別名,然后嘗試:

SELECT ms.*, 
       ms_r.message_reply_message AS message_body 
FROM   messages AS ms
       LEFT JOIN users AS u
              ON ms.message_user = u.user_id 
       LEFT JOIN message_replies AS ms_r
              ON ms.message_id = ms_r.message_reply_main 
       LEFT JOIN user_personal_information AS u_p_i
              ON ms.message_user = u_p_i.user_personal_information_user
       WHERE ms.message_user=3 AND ms.message_deleted=0 AND ms.message_permdeleted=0 
       ORDER BY ms.message_date DESC LIMIT 5

在這里查看示例

嘗試這個 ..

SELECT ms.*, 
       msr.message_reply_message AS message_body 
FROM   
(select * from messages )ms 
       LEFT JOIN users 
              ON ms.message_user = users.user_id 
       LEFT JOIN message_replies  msr
              ON ms.message_id = msr.message_reply_main 
       LEFT JOIN user_personal_information  usrp
              ON ms.message_user = 
                 usrp.user_personal_information_user

mysql語句的問題是您有2個具有相同名稱的列。

"SELECT messages.*, 
message_replies.message_reply_message AS message_body

CREATE TABLE IF NOT EXISTS `messages` (
`message_id` int(11) NOT NULL,
`message_user` int(11) NOT NULL,
`message_subject` varchar(100) NOT NULL,
`message_body` text NOT NULL,

messages表中已經具有message_body列,並且您嘗試獲取另一列並再次將其分配為message_body

在此處輸入圖片說明

當我嘗試創建表message_replies ,在current_timestamp遇到錯誤,因此我將datetime數據類型更改為timestamp並嘗試了查詢。

根據表中的數據和SELECT查詢,我認為得到了正確的結果。

SELECT messages.*, 
       message_replies.message_reply_message AS message_body 
FROM   messages 
       LEFT JOIN users 
              ON messages.message_user = users.user_id 
       LEFT JOIN message_replies 
              ON messages.message_id = message_replies.message_reply_main 
       LEFT JOIN user_personal_information 
              ON messages.message_user = 
                 user_personal_information.user_personal_information_user
        WHERE message_user=3 AND message_deleted=0 AND message_permdeleted=0   ORDER BY message_date DESC LIMIT 5

嘗試這個...

SELECT `messages`.*,`message_replies`.`message_reply_message` AS `message_body`
FROM
`new_trail_new`.`messages`
INNER JOIN `new_trail_new`.`message_replies` 
    ON (`messages`.`message_id` = `message_replies`.`message_reply_main`)
INNER JOIN `new_trail_new`.`user_personal_information` 
    ON (`messages`.`message_user` = `user_personal_information`.`user_personal_information_user`)
INNER JOIN `new_trail_new`.`users` 
    ON (`messages`.`message_user` = `users`.`user_id`)
WHERE `messages`.`message_user`=3 AND `messages`.`message_deleted`=0 AND `messages`.`message_permdeleted`=0 
   ORDER BY `messages`.`message_date` DESC LIMIT 5;

這是我通過執行以上查詢得到的輸出:

message_id  message_user  message_subject  message_body  message_to  
----------  ------------  ---------------  ------------  ---------- 
1             3         test             hello          12  

message_read  message_date        message_deleted message_permdeleted  
------------  ------------------- ---------------  ------------------- 
1       2015-10-12 02:09:51              0                  0 

message_type       message_body
-----------------  ----------------------------                  
sent               Hello, this is just a test reply    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM