Hi,
Ich habe eine Simple DB-Strucktur.
Nun wollte ich eine abfrage machen welche user alles noch die nachricht X bekommen sollen.
SELECT T1.id,T1.name,T2.msgList FROM m_user AS T1
LEFT JOIN m_msg_log AS T2 ON T2.userid=T1.id
WHERE IFNULL(2 NOT IN (T2.msgList),1)
ORDER BY T1.id
Die 2 bei IFNULL(2 NOT IN (T2.msgList),1) ist nee Variable die übergeben wird. Normaler weise soll er prüfen ob 2 in 2,1 .. 1 ... 2 ist.
Nehme ich anstelle von 2 mal die 1 so werden die user richtiger weise weggelassen die 1 oder 1, zu stehen haben.
Jedoch sobald ich eine zahl auschließen will die nach dem 1, kommt geht es nicht mehr.
Irgendwie behandelt er msgList nicht als "liste". Einer nee idee was falsch sein könnte ?
Ich habe eine Simple DB-Strucktur.
PHP:
CREATE TABLE IF NOT EXISTS `m_msg` (
`num` smallint(3) unsigned NOT NULL auto_increment,
`msg` varchar(255) NOT NULL,
PRIMARY KEY (`num`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
CREATE TABLE IF NOT EXISTS `m_msg_log` (
`userid` int(3) unsigned NOT NULL,
`msgList` varchar(255) NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `m_user` (
`id` int(3) unsigned NOT NULL auto_increment,
`name` varchar(24) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
INSERT INTO `m_msg` (`num`, `msg`) VALUES (1, 'Hallo, Nachricht 1'), (2, 'Hallo, Nachricht 2');
INSERT INTO `m_msg_log` (`userid`, `msgList`) VALUES (1, '1'),(2, '2'),(3, '1,2');
INSERT INTO `m_user` (`id`, `name`) VALUES (1, 'Test A'), (2, 'Test B'), (3, 'Test C'), (4, 'Test D'), (5, 'Test E'),(6, 'Test F');
Nun wollte ich eine abfrage machen welche user alles noch die nachricht X bekommen sollen.
SELECT T1.id,T1.name,T2.msgList FROM m_user AS T1
LEFT JOIN m_msg_log AS T2 ON T2.userid=T1.id
WHERE IFNULL(2 NOT IN (T2.msgList),1)
ORDER BY T1.id
Die 2 bei IFNULL(2 NOT IN (T2.msgList),1) ist nee Variable die übergeben wird. Normaler weise soll er prüfen ob 2 in 2,1 .. 1 ... 2 ist.
Nehme ich anstelle von 2 mal die 1 so werden die user richtiger weise weggelassen die 1 oder 1, zu stehen haben.
Jedoch sobald ich eine zahl auschließen will die nach dem 1, kommt geht es nicht mehr.
Irgendwie behandelt er msgList nicht als "liste". Einer nee idee was falsch sein könnte ?