MYSQL - Если поле пустое, мой оператор Select с wp_usermeta возвращает ноль строк. Почему? - PullRequest
0 голосов
/ 14 января 2020

Мне нужна небольшая помощь с моим утверждением Select. Я пытаюсь понять, как писать операторы select, используя таблицы wp_users и wp_usermeta. Я запускаю этот оператор выбора:

SELECT  u.display_name, u.user_email,
   ma.meta_value AS Address,
   concat( '(',left(mm.meta_value,3) , ') ' , mid(mm.meta_value,4,3) , '-', right(mm.meta_value,4)) AS Mobile,
   concat( '(',left(mp.meta_value,3) , ') ' , mid(mp.meta_value,4,3) , '-', right(mp.meta_value,4)) AS Phone,
   mc2.meta_value AS City,
   ms.meta_value AS State,
   mz.meta_value AS Zip
FROM wp_users u 
JOIN wp_usermeta ma ON u.ID = ma.user_id AND ma.meta_key = 'Address'
JOIN wp_usermeta mm ON u.ID = mm.user_id AND mm.meta_key = 'mobile_number'
JOIN wp_usermeta mp ON u.ID = mp.user_id AND mp.meta_key = 'phone_number'
JOIN wp_usermeta mc2 ON u.ID = mc2.user_id AND mc2.meta_key = 'user_city'
JOIN wp_usermeta ms ON u.ID = ms.user_id AND ms.meta_key = 'user_state'
JOIN wp_usermeta mz ON u.ID = mz.user_id AND mz.meta_key = 'user_zip'
WHERE u.id = $user_id

Если поле phone_number не заполнено, оператор возвращает без строк, если я добавляю номер телефона в поле, оно работает. Как получить запрос на возврат результатов независимо от того, являются ли какие-либо из полей, не являющихся обязательными, пустыми?

Я рассмотрел вопрос "Advanced Wordpress SQL Query", и это было не то же самое. 2-й вопрос, есть ли места, где я могу научиться лучше писать запросы, используя таблицу WordPress wp_usermeta?

1 Ответ

2 голосов
/ 14 января 2020

Так работает (inner) join; если условие соединения не выполняется, запись удаляется из набора результатов. Везде, где вам нужно разрешить отсутствующие отношения, вы хотите left join s:

...
FROM wp_users u 
LEFT JOIN wp_usermeta ma ON u.ID = ma.user_id AND ma.meta_key = 'Address'
LEFT JOIN wp_usermeta mm ON u.ID = mm.user_id AND mm.meta_key = 'mobile_number'
LEFT JOIN wp_usermeta mp ON u.ID = mp.user_id AND mp.meta_key = 'phone_number'
LEFT JOIN wp_usermeta mc2 ON u.ID = mc2.user_id AND mc2.meta_key = 'user_city'
LEFT JOIN wp_usermeta ms ON u.ID = ms.user_id AND ms.meta_key = 'user_state'
LEFT JOIN wp_usermeta mz ON u.ID = mz.user_id AND mz.meta_key = 'user_zip'
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...