MySQL объединяет пустые строки - PullRequest
2 голосов
/ 01 июня 2011

Я пытаюсь создать простой запрос для получения пользователей с определенными мета-полями (это в Wordpress, но это не важно, потому что это сырой sql)

Простой запрос, который я сделал, выглядит следующим образом

SELECT * FROM wp_sb_users u
 LEFT OUTER JOIN wp_sb_usermeta m ON (u.ID=m.user_id)
 LEFT OUTER JOIN wp_sb_usermeta mm ON (u.ID=mm.user_id)
 LEFT OUTER JOIN wp_sb_usermeta mmm ON (u.ID=mmm.user_id)
WHERE
 m.meta_key = "autostatus" AND
 mm.meta_key = "first_name" AND
 mmm.meta_key = "last_name"

хотя у меня есть только одна небольшая проблема - если mmm.meta_key = "last_name" вообще не существует, строка не возвращается .. я попробовал mmm.meta_key <=> "last_name", но затем требуется любой другой meta_key (как "user_email") и помещает туда в строке, что приводит к тому, что пользователь с именем Alex и фамилией my@email.com

Я также попытался (mmm.meta_key = "last_name" ИЛИ mmm.meta_key IS NULL), но он тоже не работает

Помогите разобраться, пожалуйста

PS Структура таблиц:

CREATE TABLE IF NOT EXISTS `wp_sb_users` (
  `ID` bigint(20) unsigned NOT NULL auto_increment,
  `user_login` varchar(60) NOT NULL default '',
  `user_pass` varchar(64) NOT NULL default '',
  `user_nicename` varchar(50) NOT NULL default '',
  `user_email` varchar(100) NOT NULL default '',
  `user_url` varchar(100) NOT NULL default '',
  `user_registered` datetime NOT NULL default '0000-00-00 00:00:00',
  `user_activation_key` varchar(60) NOT NULL default '',
  `user_status` int(11) NOT NULL default '0',
  `display_name` varchar(250) NOT NULL default '',
  PRIMARY KEY  (`ID`),
  KEY `user_login_key` (`user_login`),
  KEY `user_nicename` (`user_nicename`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=30 ;

CREATE TABLE IF NOT EXISTS `wp_sb_usermeta` (
  `umeta_id` bigint(20) unsigned NOT NULL auto_increment,
  `user_id` bigint(20) unsigned NOT NULL default '0',
  `meta_key` varchar(255) default NULL,
  `meta_value` longtext,
  PRIMARY KEY  (`umeta_id`),
  KEY `user_id` (`user_id`),
  KEY `meta_key` (`meta_key`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=792 ;

1 Ответ

3 голосов
/ 01 июня 2011
SELECT * FROM wp_sb_users u
 LEFT OUTER JOIN wp_sb_usermeta m ON (u.ID=m.user_id and m.meta_key = "autostatus")
 LEFT OUTER JOIN wp_sb_usermeta mm ON (u.ID=mm.user_id and mm.meta_key = "first_name")
 LEFT OUTER JOIN wp_sb_usermeta mmm ON (u.ID=mmm.user_id and mmm.meta_key = "last_name")
...