Одна база используется сразу же несколькими сайтами. В таблице sites есть список всех авторизованных сайтов, которые имеют доступ к базе, у каждого сайта свой id.
В каждой таблице есть колонка site, которая содержит id сайта, к которой та или иная запись относится.
Вопрос. Можно ли каким-то образом автоматически получать и работать только со своей порцией данных, чтобы каждый раз в каждом запросе не писать WHERE site = ...?
Спрашиваю не для того, чтобы облегчить себе жизнь, а для того, чтобы узнать есть ли такие возможности вообще, чтобы не делать то, чего делать не нужно.
Без схемы данных сложно сказать что-то осмысленное. В текущей формулировке вопроса я бы предложил сделать следующее:
where site = current_user()
(так кажется в mysql определяется текущий пользователь)select * from my_view
будет возвращать каждому пользователю только его данные.В развитие идеи @Dmitry о вьювах, с целью снять проблему заведения для каждого сайта отдельного пользователя. Исполняемый код, обращающийся к БД, знает, для какого именно сайта он выполняет запрос. Однако автор хочет избежать постоянной передачи имени сайта (неважно, как параметра запроса или статически). Вроде имя сайта можно было бы содержать в сессионной переменной - но в представлении переменные не допускаются.
Решением может быть пользовательская функция, возвращающая значение переменной, которая в представлении допустима. Типа
CREATE FUNCTION getsite()
DETERMINISTIC
NO SQL
RETURNS VARCHAR(128)
RETURN @site;
и соответственно
CREATE VIEW sitedata()
AS
SELECT *
FROM alldata
WHERE site = getsite();
Тогда при установлении соединения мы сразу инициализируем сессионную переменную, типа
SET @site = 'www.mysite.ru'
и обращаемся к вьювам, которые в рамках нашего соединения будут получать только данные для установленного в переменной сайта.
Костыль, конечно... и надо проверить, как оно себя поведёт при разрыве и автовосстановлении соединения... и совсем неприменимо, если используется пул соединений.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Через Curl нужно получить весь запросТо есть аккуратный массив/объект со всеми именами-значениями заголовков и отдельно тело
Подскажите, пожалуйста как передать массив php по ссылке? Итак, есть массив:
Подскажите как сделать на php, продление акции на неделю программноесть код: