У меня есть 3 таблицы:MySQL поиск 3 таблицы с одной таблицей, не связанные непосредственно
wp_users
- хранит основную информацию о всех пользователей,wp_usermeta
- магазины дополнительной информации о пользователях (имя/фамилия/и т.д.)wp_friends
- хранит информацию о друзьях от услуг третьих лиц, связанных с конкретным пользователем изwp_users
Если вы не знакомы с WordPress, вы можете увидеть структуру обеих таблиц в http://codex.wordpress.org/images/9/9e/WP3.0-ERD.png
Структура моей пользовательской таблицы wp_friends
выглядит следующим образом:
CREATE TABLE wp_friends (
id bigint(20) unsigned NOT NULL auto_increment,
uid bigint(20) unsigned NOT NULL default '0',
fr_id VARCHAR (60) NOT NULL default '',
service VARCHAR (20) NOT NULL default '',
name VARCHAR (80) NOT NULL default '',
photo VARCHAR (255) NOT NULL default '',
PRIMARY KEY (id),
KEY uid (uid),
KEY fr_id (fr_id),
KEY service (service)
)`
колонна uid
является соответствует ID
колонке в таблице wp_users
- вот как я определяю, какая запись соответствует тому пользователю.
Что я пытаюсь сделать, так это создать запрос, который будет выглядеть во всех трех таблицах для соответствия ключевому слову. Вот что я пришел с до сих пор (первая часть была порождена поисковой функцией WordPress):
SELECT
wp_users.ID,wp_users.display_name,wp_users.user_login,
wp_users.user_email,fr.fr_id,fr.name,fr.photo,fr.service
FROM wp_users
INNER JOIN wp_usermeta ON (wp_users.ID = wp_usermeta.user_id)
LEFT JOIN wp_socialaccess_friends AS fr ON fr.uid = 2
WHERE
(
(user_login LIKE '%nik%' OR user_nicename LIKE '%nik%')
AND
(wp_usermeta.meta_key = 'wp_user_level' AND CAST(wp_usermeta.meta_value AS CHAR) != '0')
)
OR (fr.uid = 2 AND (fr.fr_id LIKE '%nik%' OR fr.name LIKE '%nik%'))
GROUP BY wp_users.ID,fr.fr_id ORDER BY user_login ASC
В приведенном выше запросе ключевое слово «НиК» (который также соответствует user_login
столбец) , Требуется часть fr.uid
, чтобы возвращаемые результаты были доступны только для текущего пользователя. Запрос не выполняется следующим образом:
- Он возвращает все строки из
wp_friends
таблицы (потому чтоuser_login
столбца соответствует, а), которые имеютwp_friends.uid = 2
- Он возвращает строки, которые имеют
wp_friends.uid = 2
но согласован с пользователями гдеwp_users.ID != 2
Возможно ли создать один запрос, который будет возвращать выбранные столбцы, но также предотвратит дублирование?
Параметр '' wp_socialaccess_friends' и wp_friends' таблицы одинаковы - просто опечатка там. –