-1

Can anyone tell me what is the wrong with the query? It's not following the date condition. It's returning all the data and I want data less than the mentioned date.

SELECT `messages`.*, `user`.`firstname`, `user`.`lastname`, `user`.`organisation_name`, `user`.`type`, `user_info`.`profile_picture`, `user_info`.`logo`, `user`.`email`
FROM (`messages`) JOIN
     `user`
     ON `user`.`user_id` = `messages`.`from_id` JOIN
     `user_info`
     ON `user_info`.`uid` = `messages`.`from_id`
WHERE `messages`.`from_id` = '4' AND
      `messages`.`to_id` = '24572' AND 
      `messages`.`time_sent` <= '2016-06-23 12:41:47' OR
      `messages`.`from_id` = '24572' AND
      `messages`.`to_id` = '4' AND 
     `messages`.`time_sent` <= '2016-06-23 12:41:47'
ORDER BY `msg_id` DESC
Phil Ross
  • 25,590
  • 9
  • 67
  • 77

4 Answers4

2

I guess you can get all messages by user as a sender or reciever. Can you try below, please?

SELECT
    `messages`.*, `user`.`firstname`,
    `user`.`lastname`,
    `user`.`organisation_name`,
    `user`.`type`,
    `user_info`.`profile_picture`,
    `user_info`.`logo`,
    `user`.`email`
FROM
    `messages`
JOIN `user` ON `user`.`user_id` = `messages`.`from_id`
JOIN `user_info` ON `user_info`.`uid` = `messages`.`from_id`
WHERE
    (
        `messages`.`from_id` = '4'
        AND `messages`.`to_id` = '24572'
        AND `messages`.`time_sent` <= '2016-06-23 12:41:47'
    )
OR (
    `messages`.`from_id` = '24572'
    AND `messages`.`to_id` = '4'
    AND `messages`.`time_sent` <= '2016-06-23 12:41:47'
)
ORDER BY
    `messages`.`id` DESC
Volkan Metin
  • 178
  • 4
0

Try by removing brackets "(" and ")":

SELECT `messages`.*, `user`.`firstname`, `user`.`lastname`, `user`.`organisation_name`, `user`.`type`, `user_info`.`profile_picture`, `user_info`.`logo`, `user`.`email`
FROM `messages` JOIN
     `user`
     ON `user`.`user_id` = `messages`.`from_id` JOIN
     `user_info`
     ON `user_info`.`uid` = `messages`.`from_id`
WHERE `messages`.`from_id` = '4' AND
      `messages`.`to_id` = '24572' AND 
      `messages`.`time_sent` <= '2016-06-23 12:41:47' OR
      `messages`.`from_id` = '24572' AND
      `messages`.`to_id` = '4' AND 
     `messages`.`time_sent` <= '2016-06-23 12:41:47'
ORDER BY `msg_id` DES

And it will be helpful if you share error message and also take care about your 'AND' and 'OR' condition, as they don't have brackets so there priority will be different then what you might expect.

Ankit Sharma
  • 3,923
  • 2
  • 29
  • 49
0

Please try this..

SELECT `messages`.*, `user`.`firstname`, `user`.`lastname`, `user`.`organisation_name`, `user`.`type`, `user_info`.`profile_picture`, `user_info`.`logo`, `user`.`email`
FROM (`messages`) JOIN
     `user`
     ON `user`.`user_id` = `messages`.`from_id` JOIN
     `user_info`
     ON `user_info`.`uid` = `messages`.`from_id`
WHERE `messages`.`from_id` = '4' AND
      `messages`.`to_id` = '24572' AND 
      `messages`.`time_sent` <= '2016-06-23 12:41:47' OR
      `messages`.`from_id` = '24572' AND
      `messages`.`to_id` = '4' AND 
     `messages`.`time_sent` <= '2016-06-23 12:41:47'
ORDER BY `messages`.`msg_id` DESC
Phil Ross
  • 25,590
  • 9
  • 67
  • 77
0

Categorize the AND and OR with the () brackets AND make sure table field type


SELECT messages.*, user.firstname, user.lastname, user.organisation_name, user.type, user_info.profile_picture, user_info.logo, user.email 
FROM messages 
JOIN user ON user.user_id = messages.from_id 
JOIN user_info ON user_info.uid = messages.from_id 
WHERE (messages.from_id = '4' AND messages.to_id = '24572' AND messages.time_sent <= '2016-06-23 12:41:47')
    OR (messages.from_id = '24572' AND messages.to_id = '4' AND messages.time_sent <= '2016-06-23 12:41:47')
ORDER BY msg_id DESC

Read MySQL: Combining the AND and OR Conditions and Should I use field 'datetime' or 'timestamp'?


Example enter image description here

Community
  • 1
  • 1
Abdulla Nilam
  • 36,589
  • 17
  • 64
  • 85