CREATE TABLE IF NOT EXISTS `sendticket` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ticketid` int(11) NOT NULL,
`sendby_id` int(11) NOT NULL,
`sendto_id` varchar(60) NOT NULL,
`send_on` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `sendticket` (`id`, `ticketid`, `sendby_id`, `sendto_id`, `send_on`) VALUES
(1, 2, 1, '10', 1399276280),
(2, 4, 2, 'sdasd@fjjgf.com', 1399276280);
Мне нужно получить подробную информацию о билетах, которые мне подарили. Я использую следующий запрос, но даже если у меня нет полученных билетов, он возвращает записи.
$userid=1;
$query = $this->db->query("
select
s.send_on, s.sendby_id,
t.ticket_key, t.video_id,
a.first_name, a.last_name,
v.title, v.videothumbnail
from sendticket as s
LEFT JOIN ticket as t ON s.ticketid=t.id
LEFT JOIN auth_user_profiles as a ON a.user_id=s.sendby_id
LEFT JOIN video as v ON t.video_id=v.videoid and s.sendto_id=$userid
order by s.send_on desc
");
Здесь я ожидаю получить информацию о билете, информацию о видео, для которого был куплен билет, и информацию о пользователе, который подарил мне билет, который имеет имя sendby_id в таблице sendticket. В настоящее время у меня нет подаренных билетов, поэтому он должен возвращать нулевые записи. Но вместо этого теперь он возвращает записи, которые не соответствуют моим требованиям.
Я знаю, что левое соединение в этом случае не сработает. Я попробовал использовать INNER JOIN вместе с LEFT JOIN. Но это не сработало. Может ли кто-нибудь помочь мне решить эту проблему?
INSERT INTO `ticket` (`id`, `user_id`, `video_id`, `ticket_key`, `attempt`, `generated_on`, `status`) VALUES (1, 1, 5, '0b9d4d5aee', 0, 1399262972, 0), (2, 1, 5, '1f5de2cde3', 0, 1399263032, 0), (3, 1, 5, 'ba2376bb21', 0, 1399263036, 0), (4, 1, 2, 'd571360f37', 0, 1399267971, 0), (5, 1, 5, '99d98364e4', 0, 1399276280, 0), (6, 1, 5, '290486a5f5', 1, 1399281061, 0), (7, 1, 5, 'cccc1c72ab', 1, 1399281148, 0); [/code] sendticket (таблица, в которой хранятся сведения о том, когда билет дарят другу) [code]CREATE TABLE IF NOT EXISTS `sendticket` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ticketid` int(11) NOT NULL, `sendby_id` int(11) NOT NULL, `sendto_id` varchar(60) NOT NULL, `send_on` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `sendticket` (`id`, `ticketid`, `sendby_id`, `sendto_id`, `send_on`) VALUES (1, 2, 1, '10', 1399276280), (2, 4, 2, 'sdasd@fjjgf.com', 1399276280); [/code] Мне нужно получить подробную информацию о билетах, которые мне подарили. Я использую следующий запрос, но даже если у меня нет полученных билетов, он возвращает записи. [code]$userid=1;
$query = $this->db->query(" select s.send_on, s.sendby_id, t.ticket_key, t.video_id, a.first_name, a.last_name, v.title, v.videothumbnail from sendticket as s LEFT JOIN ticket as t ON s.ticketid=t.id LEFT JOIN auth_user_profiles as a ON a.user_id=s.sendby_id LEFT JOIN video as v ON t.video_id=v.videoid and s.sendto_id=$userid order by s.send_on desc "); [/code] Здесь я ожидаю получить информацию о билете, информацию о видео, для которого был куплен билет, и информацию о пользователе, который подарил мне билет, который имеет имя sendby_id в таблице sendticket. В настоящее время у меня нет подаренных билетов, поэтому он должен возвращать нулевые записи. Но вместо этого теперь он возвращает записи, которые не соответствуют моим требованиям. Я знаю, что левое соединение в этом случае не сработает. Я попробовал использовать INNER JOIN вместе с LEFT JOIN. Но это не сработало. Может ли кто-нибудь помочь мне решить эту проблему?