SELECT
users.id AS user_id,
shops.id AS shop_id,
networks.id AS network_id
FROM users
LEFT OUTER JOIN shops
ON shops.manager_id = users.id
LEFT OUTER JOIN networks
ON networks.manager_id = users.id
WHERE users.username = ?
AND users.pwd = ?
LIMIT 1
Когда этот запрос вернется, shop_id
будет ненулевым, если на пользователя ссылаются из таблицы магазинов, и то же самое относится к network_id
.
Обратите внимание, что если на пользователя ссылаются из таблицы магазинов или сетей более одного раза, этот запрос будет производить только одну строку; Из вашего вопроса я предполагаю, что вам все равно, с каким магазином / сетью связан пользователь, вы хотите проверить только такую связь.
Кроме того, этот запрос также будет работать:
SELECT
users.id AS user_id,
EXISTS (SELECT shops.id
FROM shops
WHERE shops.manager_id = users.id)
AS has_shop,
EXISTS (SELECT networks.id
FROM networks
WHERE networks.admin_id = users.id)
AS has_network
FROM users
WHERE users.username = ?
AND users.pwd = ?
Один из запросов может быть быстрее другого, в зависимости от того, какие индексы вы настроили для таблиц, а также от вашей версии MySQL. Попробуйте запустить их через EXPLAIN
, если проблема в производительности.