• Где узнать словари для уровней знания английского?

    @Joysi75 Автор вопроса
    Сам тоже отвечу:
    Если не скачивать -
    memrise (есть словари на 500/800/1000/2500/12000+ слов),
    lingualeo (300/500/1000).
    Ответ написан
    Комментировать
  • SELECT auto_increment при создании копии структуры таблицы?

    @Joysi75
    Под рукой нет SQL сервера (возможны ошибки синтаксиса). Но следующий вопрос не давал бы мне спокойствия:
    А если в таблице источнике (old) было удаление строки (то есть id записи идут не подряд для autoincrement поля) ? Корректно ли оно отработает (и нет ли подводных камней при переносе при вашей схеме) ?

    Я бы делал так:
    1) Создал целевую (new) таблицу без auto_increment поля
    2) Скопировал в нее все данные INSERT `new_admin_logs` (SELECT * FROM `old_admin_logs`);
    3) Повесил триггер на INSERT (для функционала auto_increment)
    DELIMITER $$
    CREATE TRIGGER auto_inc_new_admin_logs
    BEFORE INSERT ON new_admin_logs FOR EACH ROW
    BEGIN
      DECLARE new1 INT; 
      SELECT  max(id) into new1 FROM new_admin_logs;
      SET NEW.id = new1 + 1;   
    END$$

    P.S. Если таблиц много, можно отдельно завести таблицу для хранения последних значений автоинкремент полей
    P.S.S. Я так переносил в Oracle старый (у которого нет Autoincrement полей) из MSSQL
    Ответ написан
  • Как построить, структурировать изучение и повторения анг. языка?

    @Joysi75
    Если нет возможности вложиться деньгами ...

    Кирилл, я аналогично начал ~год назад.
    1) Просмотри подробно (изучив все их возможности, а не поверхностно) интернет ресурсы изучения английского (lingualeo,powerenglish и т.п.). Не все они платные. На многих есть бесплатный вариант с ограничениями (не все уроки и тренировки доступны) - для начального варианта подойдет. Платная годовая подписка все же сравнима с 1-2 посещениями репетитора - можете рискнуть . В отличии от книг - интерактивность курсов выше (30% теории, далее 70% времени на упражнения с проверкой). Так же в них, помимо занятий на грамматику и увеличения словарного запаса, есть тематические циклы - Английский с нуля, Английский для IT-специалиста, Английский для путешествий и т. п.
    2) Читайте электронную документацию. Встретили незнакомое слово - сразу в личный словарь выбранного Вами в пункте выше онлайн курса. Дальше в рамках курса заучивайте его через различные тренировки. У многих ресурсов есть плагины с удобным интерфейсом для данной цели.
    3) Я смотрел фильмы по следующему сценарию. Начинал с мультиков, у которых в силу понятных причин произношение лучше, словарный запас более ограничен, далее action-фильмы, далее - "говорильни":
    Сначала с субтитрами на английском (незнакомые слова - в словарь). Далее через дней 10 (до этого времени смотрел другие фильмы) - тот же фильм без субтитров. Сейчас стараюсь сразу без субтитров.
    4) Слушал адаптированные (урезанный словарный запас, в зависимости от сложности от 300 до 2000 слов) аудиокниги, у многих из них есть PDF версия книги.
    5) Сейчас начал читать неадаптированную художественную литературу. Вначале идет тяжело, зато через десяток страниц все легче и легче (незнакомые слова встречаются все реже и реже - все таки авторы "привыкают" к своему словарному запасу :) ).
    6) неадаптированные художественные аудиокниги пока не даются....

    НА английский старался тратить в среднем 3-4 часа в неделю.
    Ответ написан
    2 комментария
  • Можно ли выполнить UPDATE + INSERT одним запросом?

    @Joysi75
    Если нужно 2 эти операции делать в связке, то можно закрепить это поведение в самой БД через триггер, который после выполнения UPDATE сам инициирует необходимый INSERT. Логику insert-а (в вопросе уже готовые значения) пропишите в теле триггера (для Update возможен доступ к значениям до выполнения команды через псевдозапись (или как правильно в Maria они называются) OLD, к новым значениям - через псевдозапись NEW.

    CREATE TRIGGER `update_users` AFTER UPDATE ON `users`
    FOR EACH ROW 
    BEGIN
       INSERT INTO payments(status_id, user_id, description, currency_id, 
           amount, bonus_amount, sum) 
        values('2' ,new.id, 'test', 643, 
           old.balance, old.balance+new.balance, new.balance);
    END;


    тут свои + и -.
    +) БД управляет сама поведением записей (на случай, если кто 'забудет' прописать вторую команду или оформить транзакцию, или кто вручную добавляет данные из PhpMySQLAdmin и т.п.) согласно заданной логике.
    -) Нужно хорошо знать БД (где и что она хранит и т.п. ;) )
    Вопрос производительности не имеет однозначного ответа, так как зависит от многих факторов (ресурсы и текущая нагрузка сервера, частота изменений ...)
    Ответ написан
  • Выборка данных из трех таблиц MySQL с условием многие к одному?

    @Joysi75
    Немного не догоняю.
    Одним запросом:
    select ads.id, ads_meta.text, ads_images.path ...
    from ads, ads_images, ads_meta
    where ads_images.ads_id=ads.id and ads_meta.ads_id=ads.id
    order by ads.id

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

    Если будете разбивать на несколько запросов , то все равно объем информации пересылаемой с сервера БД не уменьшиться, да и на клиенте придется держать доп массивы, чтобы сохранять данные для будущих сравнений в IN-выражениях.

    P.S. Экзотика:
    1)Создайте таблицу ads_exotic ( ads_id, ads_meta_data, ads_images_data)
    2) Заведите триггеры на модификацию таблиц ads_meta и ads_images, которые будут редактировать поля ads_meta_data и ads_images_data (допустим, добавляя/удаляя/изменяя через разделители отмодифицированные данные)
    Ну и позже банально select * from ads_exotic where ads_id=X
    Но это противоречит правилам нормализации БД.
    Ответ написан
    3 комментария
  • Какой вариант хранения данных лучше?

    @Joysi75
    А использовать сторонние системы задания прав и аутентификации не рассматриваете?

    Если объектов аудита (новости, комментарии и т.п.) мало, то 1-й лучше:
    занимается меньше места, восемь комбинаций разрешений для прав в одной записи таблицы

    Если объектов аудита много, то лучше 2-й (или вводить дополнительную таблицу объект аудита), так как в первом случае придется добавлять расширением первой таблицы. Будет происходить добавлением полей (например, commentAdd, commentEdit, commentDelete и т.п.). И возможно, записи в таблице будут в этом случае сильно разрежены.

    P.S. А вообще (если не использовать стороннее решение), лучше немного поструктуризировать (если помимо новостей будут другие объекты аудита):
    - Таблицы объект аудита, Тип операции и т.п.
    Ответ написан
    1 комментарий
  • Как организовать сложный запрос в SQL?

    @Joysi75
    select distinct pa.attribute_id , pa.text from product_attribute pa, product_category pb
    where p.product_id = pa.product_id and p.category_id=8 and
    pa.product_id  not in (
      select pa2.product_id from product_attribute pa2
         where (pa2.attribute_id=9 and pa2.text=92) or (pa2.attribute_id=8 and pa2.text=55)
    ) and
    not((pa.attribute_id=9 and pa.text=92) or (pa.attribute_id=8 and  pa.text=55))

    Выражения по типу (pa.attribute_id=9 and pa.text=92) or (pa.attribute_id=8 and pa.text=55) надо формировать динамически или

    Создать третью таблицу filtr_sess (sid, attribute_id, text) куда перед вызовом закидывать текущую сессию + выбранные атрибуты. Тогда вызов можно осуществлять только по Sid-у и Category_Id.
    Примерно так (пишу без доступа к СУБД с чужого ПК, прошу не винить в синтаксисе):
    select distinct pa.attribute_id , pa.text from product_attribute pa, product_category pb, filtr_sess fs
    where p.product_id = pa.product_id and p.category_id=8 and
    pa.product_id  not in (
    select pa2.product_id from product_attribute pa2, filtr_sess s
         where (pa2.attribute_id=s.id and pa2.text=s.text and s.sid=X)
    ) and fs.sid=X and pa.attribute_id <> fs.id and pa.text <> fs.text
    Ответ написан
  • Как увеличить значение ячейки во всех строках таблицы?

    @Joysi75
    Можно и без where:
    UPDATE table1 SET col1 = col1+1

    Важный момент, решите что делать если значение поля null - прописать 1 или оставить null. Если первое - добавьте вторую команду update table1 set col1=1 where col is null, если второе - хватит и первой команды.
    Ответ написан
    1 комментарий
  • Как лучше сформировать Access List в SQL?

    @Joysi75
    Если ваше приложение не должно работать с многими разнообразными СУБД, то может лучше переформулировать вопрос на:
    "Какая СУБД позволяет ограничивать доступ на чтение-модификацию-удаление в таблицах с точностью до выдачи таких разрешений на уровень отдельных полей таблиц?".
    Например, MSSQL (и другие) давно делает это стандартными средствами.
    Можете вытаскивать эти данные из служебных таблиц или через встроенные процедуры.
    И СУБД, естественно сама контролирует введенные вами же правила.

    Если хочется самому реализовывать. То смоделируйте в таблицах и далее нормализуйте:
    Пользователи
    Группы
    Роли (Администратор, Read-only, Guest ...)

    Справочник объектов БД (справочник: таблица, хранимая процедура, поле таблицы ...)
    Объекты БД ( название таблицы, название поля таблицы со ссылкой на эту же таблицу, параметр хран процедуры...)
    Свойства объектов (поля, параметры храним процедур)
    Справочник операций над объектами (запуск хран процедур, удаление записи в таблице, модификация ПОЛЯ таблицы ...)
    Операции над объектами(к какой роли привязана какая операция из справочника + над каким объектом)
    Журнал аудита(Кто, Что, Когда - ссылки на Пользователя, Объект и Операцию + дата).
    и т.п.
    Ответ написан
    Комментировать
  • Почему использование триггера в mysql/oracle/mssql ... в web-программирование (и не только) считается признаком говнокода?

    @Joysi75 Автор вопроса
    прошу прощения за неправильную терминологию, но:
    Если взять "слои" Web-приложения, то почему нельзя сделать следующее распределение и вынести в СУБД
    Model - (СУБД - table, view + возможно stored_procedures, triggers)
    Controller - (СУБД - stored_procedures,functions,triggers)
    И оставить для веб-программирования "слои" Route и View.

    P.S. Ведь и freeware (и т.п. схемы лицензирования) СУБД (mysql ...) имеют эти механизмы и грех ими не пользоваться...
    Ответ написан
    Комментировать
  • Как послать уведомление о подключении к порту роутера?

    @Joysi75
    C Asus-ом не работал. Пишу с точки зрения других устройств (Cisco, *nix)...

    Стандартно через SNMP (правда необходимо второе устройство или доп сервис на первом)? Установить SNMP протокол. Опрашивать периодически роутер о состоянии (поднятие порта, например) и выполнять далее определенное действие.

    Можно пойти далее и выставить ловушки на события SNMP-Trap, а принимающей стороне разбирать пришедший OID и реагировать далее (слать email и т.п.).

    Ну и кастомный путь (не проверял)-
    https://github.com/RMerl/asuswrt-merlin/wiki/Sendi...
    www.snbforums.com/threads/mail-when-vpn-connection...
    Ответ написан
    Комментировать
  • Как отсортировать составной запрос?

    @Joysi75
    Или есть подвох в вопросе или в исходном вопросе изменить строчку на
    JOIN `eav_values` as `val` ON (`products`.`value_id` = `val`.`value_id` and `products`.`value_id`=2)
    Ответ написан
    Комментировать
  • Вопрос по объединению сетей?

    @Joysi75
    Я бы вообще полностью удалил TPLink из данной схемы (или оставил его как резервный маршрутизатор) и перекинул через оптику (судя по рисунку у вас темное волокно) провайдерский канал с TPLInk на Cisco. Тогда вы получите централизованное управление (проще будет настраивать правила и сервисы) и вопросы по dhcp отпадут сами собой.
    Ответ написан
    1 комментарий
  • Как правильно составить выборку из таблиц по связи многие-ко-многим и сделать CONCAT в MySQL?

    @Joysi75
    Примерно так (пишу с левого компа, где нет mysql - если что отредактируйте немного)
    select product_id as id, products.name,
      group_concat(sizes.value separator ';') as sizes 
    from product_sizes, sizes, products 
    where product_id=products.id and size_id=sizes.id 
    group by product_id


    Добавлено после комментария автора топика:
    Если необходимо выводить и те товары , у которых не указан размер, тогда:
    select products.id, products.name, 
      group_concat(sizes.value separator ';') as sizes 
    from product_sizes 
      inner join sizes on (size_id=sizes.id) 
      right join products on (product_id=products.id) 
    group by product_id order by id;
    Ответ написан
    4 комментария
  • Как ускорить поиск по таблице?

    @Joysi75
    `Phone` varchar(15) NOT NULL
    Если позволяет место на сервере лучше смените на
    `Phone` char(15) NOT NULL или (если не хранятся в значениях нецифровые символы - скобки, например)`Phone` int NOT NULL
    Так как в этом случае будет индексироваться по ключу фиксированной длины (в случае с int еще лучше, будет индексироваться по 4/8 байтам вместо 15) - соответственно поиск будет быстрее.
    Ответ написан
    Комментировать
  • Как написать sql запрос в котором возможно придется транспонировать данные в таблице?

    @Joysi75
    В таком виде не подойдет ?
    mysql> select email, group_concat(concat(character_name, ':', 
    class_name, ' ',character_level,' lvl') separator ', ') as Chars 
    from characters,players,classes 
    where player_id=players.id and class_id=classes.id group by player_id;
    +--------+--------------------------------------------+
    | email  | Chars                                      |
    +--------+--------------------------------------------+
    | a@a.ru | Merlin:wizard 70 lvl, Conan:warrior 80 lvl |
    | b@b.ru | Azariel:warrior 50 lvl, Bilbo:thief 20 lvl |
    +--------+--------------------------------------------+
    2 rows in set (0.00 sec)

    в ORacle вместо group_concat используйте LISTAGG

    Если надо отдельно в каждой колонке выводить по отдельному классу, то измените select добавив через запятую выражение аналогично выводу для Сhars, но с использованием, например , CASE где сравниваете через WHEN с требуемым классом.
    Ответ написан
    Комментировать
  • MySQL запрос, как отбросить в строке последнее слово?

    @Joysi75
    Можно и другим "монстром" :-)
    select substring_index(st1, ' ', length(st1) - length(replace(st1,' ',''))) as alt ....
    Ответ написан
    Комментировать
  • Какие стоит почитать книги по Oracle?

    @Joysi75
    Очень хорошая и достаточно детальная книга:
    "Стивен Фейерштейн, Билл Прибыл Oracle PLSQL.
    Для профессионалов, 6-е издание (2015)" (или более ранняя)
    Ответ написан
    Комментировать
  • Насколько легальны сервисы обратного звонка?

    @Joysi75
    Не знаю как в вашем случае, но в начале века (15 лет назад) для выхода в интернет население использовало dial up соединения . Телефонная связь часто тарифицировалась по "повременке" ( по типу рубль в минуту). И чтобы любители подолгу зависать на телефонных модемах в интернете не страдали финансово, на модемах оператора настраивали callback (обратный прозвон юзеру), при котором тарификации не было (ибо шел для пользователя входящий звонок).
    Были юрлица (не операторы связи), которые (купив модемный пул, интернет канал, и выход в телефонную сеть ) выпускали карточки для выхода в интернет по данной схеме и прикрывались они агентскими договорами с оператором связи + у них было сертифицированное оборудование, размещенное на узлах связи, которые были сданы и приняты РосСвязьНадзором. Все законно. Думаю и сейчас аналогично.
    Ответ написан
    Комментировать
  • Не ставятся пакеты в github atom, как быть?

    @Joysi75
    Прописать в Path директорию в которой находится apm по типу (отредактируйте):
    C:\Users\John\AppData\Local\atom\app-1.1.0\resources\app\apm\bin
    Проверить можно через where apm в командной строке

    Прописать proxу из командной строки windows (редактировать на предмет proxy напрямую файл .apmrc не стоит - при перезапуске atom удалит введенный строки)
    apm config set proxy "192.168.1.1:3128"
    apm config set https_proxy "192.168.1.1:3128"

    Просмотреть что
    apm config list
    Ответ написан
    Комментировать