MySQL Примеры использования команды JOIN

Концепция использования операции JOIN в MySQL. И так, пускай у нас есть две таблицы. Таблица Table A с лева и таблица Table B с права и в каждой из них есть 4 записи:

id name       id  name
-- ----       --  ----
1  Pirate     1   Rutabaga
2  Monkey     2   Pirate
3  Ninja      3   Darth Vader
4  Spaghetti  4   Ninja

Давайте попоробуем использовать операцию JOIN на этих двух таблицах. И так, первый пример Inner join, оставит нам только то, что есть в Table A и Table B:

SELECT * FROM TableA INNER JOIN TableB
ON TableA.name = TableB.name

id  name       id   name
--  ----       --   ----
1   Pirate     2    Pirate
3   Ninja      4    Ninja

Full outer join — обьединение таблицы Table A с Table B:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

id    name       id    name
--    ----       --    ----
1     Pirate     2     Pirate
2     Monkey     null  null
3     Ninja      4     Ninja
4     Spaghetti  null  null
null  null       1     Rutabaga       
null  null       3     Darth Vader

Left outer join — результатом будут все записи из таблицы Table A и в таблице Table B остануться только общие записи, вместо всех остальных будет null:

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name

id  name       id    name
--  ----       --    ----
1   Pirate     2     Pirate
2   Monkey     null  null
3   Ninja      4     Ninja
4   Spaghetti  null  null

Для того, что бы получить все записи из Table A которых нет в Table B мы так же будем использовать Left outer join исключая те значения которые нам не ныжны:

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableB.id IS null

id  name       id     name
--  ----       --     ----
2   Monkey     null   null
4   Spaghetti  null   null

Для того, что бы получить набор уникальных значений для Table A и Table B будем использовать full outer join с исключениями:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.id IS null 
OR TableB.id IS null

id    name       id    name
--    ----       --    ----
2     Monkey     null  null
4     Spaghetti  null  null
null  null       1     Rutabaga
null  null       3     Darth Vader


Количество просмотров :55762

Зависание службы Windows Process Activation в процессе запуска

Служба Windows Process Activation может зависнуть в процессе запуска, что препятствует запуску и работе IIS. В таком случае в журнале событий регистрируется сообщение:

Log Name: System
Source: Service Control Manager
Event ID: 7022
Description: The Windows Process Activation Service service hung on starting.

Причины этого феномена подробно описываются в kb975443. Для устранения проблемы можно воспользоваться прилагаемым исправлением, либо добавить в реестр ключ HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\LsaLookupRestrictIsolatedNameLevel типа DWORD со значением 1. Перезагрузка не требуется, достаточно снять зависший процесс и запустит службу заново.
 


Количество просмотров :2351

Расшариваем папку на Linux машине при помощи Samba

Конфигурация Samba находится в файле /etc/samba/smb.conf. Редактируем этот файл и меняем рабочую группу на нужную

workgroup = workgroup

выбираем интерфейс

interfaces = lo eth0
bind interfaces only = yes

разрешаем работу с нашей сетью

host allow = 127. 192.168.0.0/24

и запрещаем доступ всемостальным

hosts deny = 0.0.0.0/0

проверьте что параметры:

security = user
guest ok = yes

Далее создаем  новую секцию, например [eddnet] и добавляем туда такие параметры:

[eddnet]
path = /usr/local/utorrent/download
writeable = yes
browseable = no
guest ok = yes
write list = root, eddnet
create mask = 0644
directory mask = 0700

path — путь к папке которую разшариваем.

После всех этих не хитрых манипуляций, создаем нового пользователя eddned и назначаем ему пароль

smbpasswd -a eddned

Количество просмотров :2839

Bash нюансы. Часть 2. Длина переменной

Для того, что бы найти длину строки вы можете использовать следующий синтаксис:

#!/bin/bash
${#variableName}
echo ${#variableName}
len=${#var}

Как пример использования, небольшой скрипт для добавления FTP пользователя:

#!/bin/bash
# Usage : Add a ftp user
_fuser="$1"
_fpass="$2"

# die if username/password not provided
[ $# -ne 2 ] && { echo "Usage: addftpuser username password"; exit 1;}

# Get username length and make sure it always <= 8
[[ ${#_fuser} -ge 9 ]] && { echo "Error: Username should be maximum 8 characters in length. "; exit 2;}

# Check for existing user in /etc/passwd
/usr/bin/getent passwd "${_fuser}" &>/dev/null

# Check exit status
[ $? -eq 0 ] && { echo "Error: FTP username \"${_fuser}\" exists."; exit 3; }

# Add user
/sbin/useradd -s /sbin/nologin -m  "${_fuser}"
echo "${_fpass}" | /usr/bin/passwd "${_fuser}" --stdin

Часть 1. Значение по умолчанию для переменных
Часть 2. Длинна переменной


Количество просмотров :3526

Настройка авторизации Cacti через LDAP в AD

В общем, документации по данному вопросу не шибко много, в интернете то же можно найти крохи информации, поэтому покажу настройки которые у меня заработали.

Первое, это путь к группе пользователи которой будут иметь доступ:

Group Distingished Name (DN) — CN=cacti,OU=ITDepartment,OU=ITDepartment,OU=Kyiv,OU=corp,DC=eddnet,DC=org

далее

Group Member Attribute — member
Group Member Type — Distingished Name

Теперь переходим к настройке поиска. Исходная точка поиска у меня:

Search Base — OU=corp,DC=eddnet,DC=org

и самое интересное это фильтр:

Search Filter — (&(objectclass=user)(objectcategory=user)(sAMAccountName=<username>))

Не про пользователя с именем которого мы будем подсоединяться к AD:

Search Distingished Name (DN) — eddnet\user

и естественно его пароль


Количество просмотров :4266

Bash нюансы. Часть 1. Значение по умолчанию для переменных

Не все знают, что в bash  есть возможность назначить входной переменной параметр по умолчанию. Как пример, если параметр $1 не задан то использовать root:

user=${1:-root}

Еще один пример использования:

#!/bin/bash
dir="${1:-/tmp}"
cp * $dir
echo "Все скопировано в ${dir}"

Вы так же можете назначить значение по умолчанию обычной переменной. Как пример выведем значение параметра $VAR при помощи echo, при этом, если $VAR не задан то присвоить значение parametr:

echo ${VAR:=parametr}

Важно помнить, что со специальными параметрами, такими как например $1 необходимо использовать конструкцию ${var:-defaultValue}
 

Часть 1. Значение по умолчанию для переменных
Часть 2. Длинна переменной


Количество просмотров :5149

Как подружить Windows 7 и Samba?

Долго бился я с данной проблемой, при этом дома у меня такая связка работает без проблем. В итоге помогло следующее — запускаем secpol.msc, откроется окно локальных политик безопасности

1
 

переходите в Локальные Политики/Параметры безопасности/ и ищите там параметр Сетевая безопасность: уровень проверки подлинности LAN Manager:


2

меняем его значение на Отправлять LM и NTLM — использовать сеансовую безопасность NTLMv2 при согласовании


Количество просмотров :8928

Php Определяем IP-адрес пользователя учитывая прокси сервер

Эта функция просто выручила меня недавно. В одном из локальных проектов необходимо было фиксировать ip адреса пользователей, но вот проблема, компания очень большая, и выходят пользователи через проксю. Так вот при помощи этой функции можно узнать настоящий ip

<?php
function getip()
{
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"),"unknown"))
$ip = getenv("HTTP_CLIENT_IP");

elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");

elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");

elseif (!empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];

else
$ip = "unknown";

return($ip);
}
?>

Количество просмотров :14087

Nginx HTTP redirect с requested домена на другой адрес

редирект без использования location:

server {
listen IP:80;
server_name requested_domain.tld;
rewrite ^ http://target_domain.tld$request_uri;
}

редирект с использованием location:

server {
listen IP:80;
server_name requested_domain.tld;
location = / { rewrite ^ http://redirect.to/; }
}

Количество просмотров :5334

Pph Конвертер win1251 в utf8

Функция преобразования кодировки текста из win-1251 в utf-8. Во входной параметр подаем текс который необходимо конвертировать

<?php 
function convert($text)
{
$tmp="";
for($i=0, $m=strlen($text); $i< $m; $i++)
{
$char=ord($text[$i]);

if ($char<=127) {$tmp.=chr($char); continue; }
if ($char>=192 && $char< =207)    {$tmp.=chr(208).chr($char-48); continue; }
if ($char>=208 && $char< =239) {$tmp.=chr(208).chr($char-48); continue; }
if ($char>=240 && $char< =255) {$tmp.=chr(209).chr($char-112); continue; }
if ($char==184) { $tmp.=chr(209).chr(145); continue; };
if ($char==168) { $tmp.=chr(208).chr(129);  continue; };
}
return $tmp;
}
?>

Количество просмотров :3008