INNER JOIN
- это синтаксис ANSI, который вы должны использовать.
Обычно считается более читаемым, особенно когда вы присоединяетесь к множеству таблиц.
Его также можно легко заменить OUTER JOIN
всякий раз, когда возникает необходимость.
Синтаксис WHERE
более ориентирован на реляционную модель.
Результат двух таблиц JOIN
ed является декартовым произведением таблиц к которому применяется фильтр, который выбирает только те строки с совпадающими столбцами.
Легче это увидеть с синтаксисом WHERE
.
Что касается вашего примера, в MySQL ( и в SQL вообще) эти два запроса являются синонимами.
Также обратите внимание, что MySQL также имеет предложение STRAIGHT_JOIN
.
Используя этот пункт, вы можете управлять порядком JOIN
: какая таблица проверяется во внешнем цикле и какая из них находится во внутреннем цикле.
Вы не можете управлять этим в MySQL с помощью синтаксиса WHERE
.
Используйте обратный прокси nginx:
apt-get install nginx
. Примечание. Я предположил, что у вас уже нет apache или другого веб-сервера на хосте ... /etc/nginx/sites-available
, который перенаправляет этот сайт на http-сайт докер-контейнера, который будет работать на каком-то другом заранее установленном порту (например, 2001, 2002, ...). Каждый сайт получает свой собственный файл, как тот, который приведен ниже, но с разными заранее подготовленными портами для каждого сайта. Внешние пользователи получат доступ к ним на порту 80 того же IP-адреса, но с разными именами веб-сайтов, и из этих имен nginx будет обрабатывать необходимые внутренние подключения незаметно. /etc/nginx/sites-enabled
и перезапускали nginx
. Позже вы можете удалить одну из этих ссылок и перезапустить nginx, если вам нужно временно отключить доступ к сайту. docker run
в /etc/rc.local
и перенаправляя предварительно назначенный порт хоста (localhost: 2001) в контейнерный порт 80, например docker run -d -p localhost:2001:80 imageA
Если контейнер упал, вы получите ошибку шлюза от nginx. Это может быть настроено для показа пользовательской HTML-страницы. Для большей надежности лучше управлять контейнерами в supervisord
или другом диспетчере процессов, который обновляет мертвые процессы.
Вот пример файла сайта nginx для перенаправления на порт 2001:
upstream dockerA {
server localhost:2001;
}
server {
listen 192.168.1.8:80; // REPLACE WITH HOST NUMERIC IP ADDRESS
root /var/web/siteAstaticfiles;
index index.html;
server_name www.siteA.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://dockerA;
}
}
В этом примере, хотя локальный каталог диска для файлов HTML настроен для сайта A, он не используется. Вместо этого все запросы отправляются вверх по течению. Я не проверял, можно ли безопасно пропустить строки root
и index
.
Более подходящий способ размещения нескольких веб-сайтов на одном хосте с помощью docker, docker-compose и nginx-proxy: https://blog.florianlopes.io/host-multiple-websites-on-single-host -docker /