Рубрика: Linux
Наработки и статьи по работе с Linux
Коварный UNION..

Иной раз не знаешь где затупишь. Казалось бы простой запрос с использованием UNION, а потратил кучу времени, чтобы выяснить, почему он иногда не корректно отрабатывает.
Было:
1 2 3 |
$sql="select * from (select amount,local_date as date,managers.fio as tar_id,'enter' as type from payments inner join managers on payments.mod_person=managers.person_id where agrm_id='$agrm_id' UNION " . "SELECT amount,DATE_ADD(period, INTERVAL 1 DAY) as date,tarifs.descr as tarif,'inet' as type FROM rentcharge inner join tarifs on rentcharge.tar_id=tarifs.tar_id where rentcharge.agrm_id='$agrm_id' and amount<>0 UNION " . "select usbox_charge.amount,usbox_charge.charge_date,tarifs.descr as tarif,'tv' from usbox_charge inner join usbox_services on usbox_charge.serv_id=usbox_services.serv_id inner join tarifs on tarifs.tar_id=usbox_services.tar_id where usbox_charge.amount<>0 and usbox_charge.agrm_id='$agrm_id') as res order by date"; |
Стало:
1 2 3 |
$sql="select * from (select amount,local_date as date,managers.fio as tar_id,'enter' as type from payments inner join managers on payments.mod_person=managers.person_id where agrm_id='$agrm_id' UNION ALL " . "SELECT amount,DATE_ADD(period, INTERVAL 1 DAY) as date,tarifs.descr as tarif,'inet' as type FROM rentcharge inner join tarifs on rentcharge.tar_id=tarifs.tar_id where rentcharge.agrm_id='$agrm_id' and amount<>0 UNION ALL " . "select usbox_charge.amount,usbox_charge.charge_date,tarifs.descr as tarif,'tv' from usbox_charge inner join usbox_services on usbox_charge.serv_id=usbox_services.serv_id inner join tarifs on tarifs.tar_id=usbox_services.tar_id where usbox_charge.amount<>0 and usbox_charge.agrm_id='$agrm_id') as res order by date"; |
В чем соль? Оператор UNION без опции ALL оказывается обладает свойствами группировки одинаковых значений в запросе. Например у меня, при одинаковых одновременных значениях даты и суммы происходила группировка этих строчек в одну…
Генерируем случайные файлы в консоли Linux
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/sh # Generate random name files i=1 max=20 while [ $i -lt $max ] do tmpfile="/backup/`uuidgen`.gz" touch $tmpfile let i=i+1 done |
Автоматическая «прибивка» пользователей к портам устройств в LanBilling 2 путем опроса MAC свичей
Дано:
1) LanBilling в которой ведется журнал авторизации пользователей по логину с указанием MAC адреса устройства с которого прошла авторизация.
2) В LanBilling нет привязки пользователя ни к порту, ни к сетевому устройству.
Задача: опросить все сетевые устройства, узнать все MAC адреса и порты свичей на которых «висят» пользователи
Решение:
— получаем у свичей информацию о MAC адресах на портах
— ищем этот MAC в истории авторизации LanBilling — получаем учетку
— «прибиваем» эту учетку в LanBilling к конкретному устройству, к конкретному порту.
Вуаля! Теперь когда пользователь звонит «ничего не работает», мы знаем на каком свиче и на каком порту он сидит. Ура товарищи!
Быстрый доступ к основным командам в Linux
Я человек ленивый. А потому часто используя одни и те-же команды в консоли Linux, сделал себе диалоговое окошко с меню, отображаемое при помощи bash, которое помогает мне сократить время на вспоминание что где когда и зачем. А помогла мне в этом утилита dialog.