быстро и грязно
$query = "SELECT * FROM `users` u
INNER JOIN `markers` m ON (m.author = u.id)
INNER JOIN``imagemarkers` im ON (im.author = u.id)
WHERE u.username LIKE '%$s%'
OR u.email LIKE '%$s%'
OR u.location LIKE '%$s%'
OR m.author LIKE '%$s%'
OR m.bike LIKE '%$s%'
OR m.title LIKE '%$s%'";
Это свяжет результаты вместе, так что отображаются только маркеры и маркеры изображений, связанные с пользователями.
Обратите внимание, что я не знаю, является ли markers.author полем integer
, связывающимся с users.id
, или полем символа, связывающимся с users.name
, этот запрос предполагает первый, пожалуйста, измените условие соединения соответственно, если это не так сопоставьте свои таблицы.
Если вы пропустите условия соединения, вы получите перекрестное соединение, что на 99% скорее всего не то, что вам нужно.
См .: http://en.wikipedia.org/wiki/Join_(SQL)
Явный список столбцов
Если вы хотите ограничить столбцы, вы должны будете назвать их явно (рекомендуется).
$query = "SELECT u.location, u.email, u.username as author, u.id as user_id
,m.title as marker_title, m.bike, m.date as marker_date, m.id as marker_id
,im.title as imagemarker_title, im.date as imagemarker_date, im.id as imagemarker_id
FROM `users` u
INNER JOIN `markers` m ON (m.author = u.id)
INNER JOIN``imagemarkers` im ON (im.author = u.id)
WHERE u.username LIKE '%$s%'
OR u.email LIKE '%$s%'
OR u.location LIKE '%$s%'
OR m.author LIKE '%$s%'
OR m.bike LIKE '%$s%'
OR m.title LIKE '%$s%'";
Обратите внимание, что, поскольку все связано с автором, вам нужно перечислить это поле только один раз, потому что в противном случае вы получите 3 авторских поля с одинаковым содержанием, , что было бы глупо.