CodeIgniter-Abfrage mit LEFT JOINs gibt unerwünschte/nicht verwandte Zeilen zurückPhp

PHP-Programmierer chatten hier
Anonymous
 CodeIgniter-Abfrage mit LEFT JOINs gibt unerwünschte/nicht verwandte Zeilen zurück

Post by Anonymous »

Ich habe 4 Tabellen wie unten beschrieben:
auth_user_profiles (Tabelle, die Benutzerdetails enthält)

Code: Select all

CREATE TABLE IF NOT EXISTS `auth_user_profiles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`first_name` varchar(255) NOT NULL,
`last_name` varchar(255) NOT NULL,
`birthdate` int(11) NOT NULL,
`relationship` smallint(6) NOT NULL COMMENT '1-single 2-married 3-Engaged 4- Separated 5- Divorced 6-Other',
`address` varchar(255) NOT NULL,
`city` varchar(50) NOT NULL,
`zipcode` int(11) NOT NULL,
`phone_no` char(12) NOT NULL,
`country` int(11) NOT NULL,
`work` varchar(255) NOT NULL,
`registeredip` char(15) NOT NULL,
`registerdate` int(11) NOT NULL,
`profileimage` varchar(200) NOT NULL DEFAULT 'default',
`gender` smallint(6) NOT NULL,
`profession` varchar(50) NOT NULL,
`aboutme` varchar(250) NOT NULL,
`referral_balance` decimal(10,2) NOT NULL,
`website` varchar(255) DEFAULT NULL,
`google_open_id` varchar(256) DEFAULT NULL,
`yahoo_open_id` varchar(256) DEFAULT NULL,
`facebook_id` varchar(256) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

INSERT INTO `auth_user_profiles` (`id`, `user_id`, `first_name`, `last_name`, `birthdate`, `relationship`, `address`, `city`, `zipcode`, `phone_no`, `country`, `work`, `registeredip`, `registerdate`, `profileimage`, `gender`, `profession`, `aboutme`, `referral_balance`, `website`, `google_open_id`, `yahoo_open_id`, `facebook_id`) VALUES
(1, 1, 'dfdfa', 'ddfm', 638649000, 1, 'fghfllgdfg', 'kdddd', 9887888, '25896589518', 67, 'NNNooo', '127.0.0.1', 1393409056, 'cind.jpg', 1, '', 'sssssssppp', 34.03, NULL, 'https://www.google.com/accounts/o8/id?id=AItOawlUhpWgJhYxjlgg8UjhsKR0u40IvYQrGZ0', 'https://me.yahoo.com/a/Yl_iKDxqkIJIvZ7y5KHTBdkNDw2L#79ed5', NULL),
(2, 2, 'Kichu', 'K', 0, 0, '', '', 0, '8958698565', 20, '', '127.0.0.1', 1394014161, 'default', 0, '', '', 0.00, NULL, NULL, NULL, NULL);
video (Tabelle, die Videodetails speichert)

Code: Select all

CREATE TABLE IF NOT EXISTS `video` (
`videoid` int(11) NOT NULL AUTO_INCREMENT,
`videocode` varchar(20) NOT NULL,
`title` varchar(250) NOT NULL,
`videotype` smallint(6) NOT NULL COMMENT '0-main or 1-trailer',
`category` int(11) NOT NULL,
`length` int(11) NOT NULL,
`associatedvideo` int(11) NOT NULL COMMENT 'trailer link',
`videolink` varchar(255) NOT NULL,
`videothumbnail` varchar(250) NOT NULL,
`uploaderid` int(11) NOT NULL,
`description` text NOT NULL,
`views` int(11) NOT NULL,
`likes` int(11) NOT NULL,
`dislikes` int(11) NOT NULL,
`permission` smallint(6) NOT NULL COMMENT '0-pending 1-approved 2-rejected',
`genre` int(11) NOT NULL,
`language` int(11) NOT NULL,
`keywords` varchar(256) NOT NULL,
`ticket_price` varchar(50) NOT NULL,
`added_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`videoid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

INSERT INTO `video` (`videoid`, `videocode`, `title`, `videotype`, `category`, `length`, `associatedvideo`, `videolink`, `videothumbnail`, `uploaderid`, `description`, `views`, `likes`, `dislikes`, `permission`, `genre`, `language`, `keywords`, `ticket_price`, `added_on`) VALUES
(1, '', 'Video 1', 0, 0, 10, 0, 'teamwork.mp4', 'images (1).jpg', 1, 'The first video uploaded.', 0, 0, 0, 1, 11, 2, 'cartoon', '', '2014-04-28 12:16:31'),
(2, '', 'dddddd', 0, 0, 10, 0, 'video.mp4', 'images (6).jpg', 1, 'vc fdsdf sdfsdf dfgdf sdfd ghg.', 0, 0, 0, 1, 6, 2, 'dfgfdg sd fsdf', '', '2014-04-28 12:46:17'),
(3, '', 'asdasfsd', 0, 0, 10, 5, 'video.mp4', 'images_(6).jpg', 1, 'dg', 282, 1, 0, 1, 5, 2, 'tdgfg', '11.2', '2014-04-28 12:54:17'),
(4, '', 'asedas sfgv', 0, 0, 66, 0, 'teamwork.mp4', 'images (8).jpg', 1, 'hdgh xdg fg dfgdf', 11, 0, 0, 1, 11, 2, 'video ', '', '2014-04-28 13:00:46'),
(5, '', 'sdfftgesgsdfgsd', 1, 0, 33, 3, 'test.mkv', 'images (2).jpg', 0, 'fgdfg', 242, 0, 0, 1, 5, 2, 'fdgdfg,video', '12.99', '2014-04-29 06:18:32');
ticket (Tabelle, die Ticketdetails für Videos speichert)

Code: Select all

CREATE TABLE IF NOT EXISTS `ticket` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`video_id` int(11) NOT NULL,
`ticket_key` varchar(100) NOT NULL,
`attempt` smallint(6) NOT NULL,
`generated_on` int(11) NOT NULL,
`status` smallint(6) NOT NULL COMMENT '0-new 1-expired',
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

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);
sendticket (Tabelle, in der Details gespeichert werden, wenn das Ticket einem Freund geschenkt wird)

Code: Select all

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, '[email protected]', 1399276280);
Was ich benötige, ist, die Details der Tickets zu erhalten, die mir geschenkt werden. Ich verwende die folgende Abfrage, aber selbst wenn ich keine Tickets erhalten habe, werden Datensätze zurückgegeben.

Code: Select all

$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
");
Hier erwarte ich die Ticketdetails, Videodetails, für die das Ticket gekauft wurde, und die Details des Benutzers, der mir das Ticket geschenkt hat, das in der Tabelle sendticket sendby_id ist. Derzeit habe ich keine geschenkten Tickets, daher sollte es keine Datensätze geben. Aber stattdessen werden jetzt Datensätze zurückgegeben, die nicht meinen Anforderungen entsprechen.
Ich weiß, dass der linke Join in diesem Fall nicht funktioniert. Ich habe es mit INNER JOIN zusammen mit LEFT JOIN versucht. Aber es hat nicht funktioniert. Kann mir jemand helfen, dieses Problem zu beheben?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post