Ответы пользователя по тегу MySQL
  • Как вставить строку, только если такой нет?

    Adamos
    @Adamos
    UNIQUE индекс на эти три столбца + INSERT IGNORED
    Ответ написан
    Комментировать
  • Как спроектировать базу данных?

    Adamos
    @Adamos
    Или все комментарии к определенному кондиционеру

    Сначала надо не запутаться в терминологии и определить, что такое "определенный кондиционер" - это конкретная балалайка у конкретного клиента или конкретная модель, по которой вы будете собирать отзывы?
    Впрочем, данных у вас будут не миллионы строк, так что достаточно просто соблюдать нормализацию - вытянуть их проблемой не будет.
    Если вам так важно обрабатывать именно комментарии, сделайте избыточную таблицу, где в каждой строчке будет писаться вся нужная информация - и заказчик, и техник, и модель, и идентификатор устройства...
    Кстати, возможно, стоит разделить комментарии техника - об устройстве и о клиенте ;)
    Ответ написан
    1 комментарий
  • Как правильно установить и настроить LAMP на Ubuntu 17.04?

    Adamos
    @Adamos
    sudo apt-get install vagrant virtualbox git
    git clone https://github.com/scotch-io/scotch-box ~/my-project
    cd ~/my-project
    vagrant up
    Ответ написан
  • Как ускорить запрос mysql?

    Adamos
    @Adamos
    AND могут быть не только в WHERE, но и в ON.
    Если в них не результаты, а поля - именно там им и место.
    Ну, и чудовищный IN и длинное сочетание AND-OR стоит превратить в подзапрос, имхо.
    Может быть, и остальные условия собрать в подзапрос перед JOIN, если они отсекают достаточно много полей....
    Ответ написан
    Комментировать
  • Зачем нужен Null в MySQL?

    Adamos
    @Adamos
    Ну, попробуйте установить "нулевое значение" для даты или логического поля.
    Внезапно, это будет 1970-01-01 и false, а не какое-то "отсутствие значения".

    Кроме того, NULL - это значение поля при LEFT JOIN в случае, если во второй таблице не нашлось подходящей строки. Опять-таки - не нулевое значение, а его отсутствие.
    Ответ написан
    Комментировать
  • Как ускорить обработку запроса к бд?

    Adamos
    @Adamos
    Вам нужен список записей, у каждой из которых есть список связанных записей?
    Это делается двумя запросами:
    1. Загрузить нужные записи.
    1.1. В РНР пройти по ним и собрать id связанных записей.
    2. Загрузить все записи со связанными id.
    2.1. В РНР пройти по всем записям и приписать им подходящие связанные.
    И все. Никаких запросов в цикле и многосекундного дерганья одной жалкой тысячи записей.

    Собственно, если в Ларавеле прописать связь этого поля с той же таблицей и использовать lazy load, он, по-моему, вполне самостоятельно обходится теми же двумя запросами...
    Ответ написан
    Комментировать
  • Как настроить в PhpStorm подключение к удаленной MySQL (через Vagrant)?

    Adamos
    @Adamos
    localhost - это та машина, на которой вы работаете.
    Вам же нужно указать сетевой адрес виртуалки.
    Скорее всего, по умолчанию доступ к БД извне закрыт - нужно будет его разрешить.
    Ответ написан
    Комментировать
  • Как организовать структуру БД для электронных журналов?

    Adamos
    @Adamos
    Я бы начинал думать с вопроса "а зачем здесь именно реляционная база данных и что от нее на самом деле потребуется?".
    Если не знаете ответа - присмотритесь к базам, специально заточенным под хранение документов.
    Ответ написан
  • Как ускорить XAMPP под Windows?

    Adamos
    @Adamos
    Лучший способ ускорить WAMP - это вынести его за подоконник.
    Гравитация придаст ему необходимое ускорение.
    Ответ написан
    Комментировать
  • Как создают БД MySQl для крупных проектов: написанием кода вручную или через различные интерфейсы по типу phpMyAdmin?

    Adamos
    @Adamos
    Как бы вы ни прокачивали профессиональный навык написания БД руками, вы всегда будете проигрывать в точности и скорости автоматическим средствам.
    Лучше прокачивать профессиональный навык придумывания БД головой - в этой области конкуренция поменьше.
    Ответ написан
    Комментировать
  • Как добавить id в запрос SELECT?

    Adamos
    @Adamos
    SELECT e.`id`, e.`name`
    FROM `news` e 
    ORDER BY DATEDIFF(NOW(), e.`date`) ASC
    LIMIT 20

    Собственно, формулу можно и усложнить, если вы понимаете, что на самом деле хотите получить от двух сортировок в разные стороны.
    Ответ написан
    Комментировать
  • Как в MYSQL получить обработанные запросом строки?

    Adamos
    @Adamos
    Начинаете транзакцию.
    Обрабатываете строки.
    По тому же условию обновляете строки.
    Завершаете транзакцию.

    Это, на самом деле, будет проще и надежнее любых хитро составленных запросов.
    Ответ написан
    Комментировать
  • Как вы бы ускорили этот php код?

    Adamos
    @Adamos
    Не стоит тратить свою юность на mysql_ - функции. Они мало того, что ужасны, так еще и устарели.
    Пока вам не требуется сложная работа с базой, можно пожить, например, с SafeMySQL. Это, конечно, не панацея и в перспективе вообще тупик, но по сравнению со спагетти из функций - радость и благорастворение воздухов.

    Не стоит мешать код и верстку. Рано или поздно все равно дойдете до их разделения, лучше рано. Сначала весь PHP: подготовьте все данные, которые будут выведены. Потом пошла страница с минимальными вставками уже подготовленных данных. Максимум допустимой логики - вывод данных в цикле.

    Если у вас тяжелые внешние ссылки, сделайте ленивую загрузку. Хотя бы элементарно - выводите страницу со всей версткой, но без конкретики, а в конце пишите javascript, который назначает конкретным картинкам конкретные src. Это несложно, правда. Впрочем, если для этого познакомиться хотя бы и с общеизвестным JQuery, все станет еще проще...
    Ответ написан
    Комментировать
  • Как оптимизировать время сайта?

    Adamos
    @Adamos
    var t = new Date();
    t.setTime(<?= strtotime('now') ?>);
    write(t.toLocaleTimeString());
    Ответ написан
    Комментировать
  • Как вывести записи по дням с совпадающими значениями?

    Adamos
    @Adamos
    Обычное решение - JOIN таблицу саму с собой ON idUsr и date(time) равны, а id разные.
    Ответ написан
    Комментировать
  • MySQL запрос с условием MAX()?

    Adamos
    @Adamos
    SELECT `id`, `num` FROM `table` HAVING `active`=1 AND `num`=MAX(`num`)
    Ответ написан
  • Как сделать так, чтобы при добавлении информации в базу использовались сразу все пользователи?

    Adamos
    @Adamos
    Я бы сделал кроме личных сообщений - оповещения (те, которые всем). Можно в той же таблице, просто с нулевым адресатом.
    И к ним дополнительную таблицу - последний id оповещения, которое получил пользователь.
    Все оповещения, которые еще им не были получены, выдаются ему при первом же входе, при этом в таблицу заносится id последнего выданного.
    Хотя им неплохо бы и срок жизни иметь - через год-два смысла в них точно не будет...
    Ответ написан
    Комментировать
  • Как исправить странное поведение group by?

    Adamos
    @Adamos
    select * from `product_options`
    inner join `product_option_values` on `product_options`.`id` = `product_option_values`.`option_id` AND `product_option_values`.`product_id` in (1,2,3)
    group by `product_option_values`.`value`
    Ответ написан
  • Как ускорить запрос к базе данных MySQL?

    Adamos
    @Adamos
    Видимо, таким образом, медленно и печально, идет процесс нормализации базы - превращения этого чудища со столбцом на 30-40 элементов в отдельную таблицу фраз и таблицу связей между 1otsev и фразами.
    Но вы маетесь ерундой, дергая таблицы по одной и делая запросы в цикле.
    1. Добавьте UNIQUE индекс на `frase`, и используйте INSERT IGNORE, после этого база сама не даст вставить дубль.
    , как совершенно справедливо посоветовал Rsa97.
    2. Прочитайте ВСЮ таблицу 1otsev и составьте массив фраз, которые должны быть в таблице key, в самом скрипте - не мучайте зря базу, уникальные значения и РНР отличать умеет.
    3. А уже потом этот массив ОДНИМ запросом запихните в таблицу key.
    4. Ну, и после этого можно будет прочесть таблицу key, спокойно пройтись еще раз по 1otsev, для каждой строчки составить данные для таблицы соответствий и опять-таки ОДНИМ запросом записать их. И еще одним - удалить этот дурацкий столбец с перечислением.
    Вряд ли это займет больше часа...
    Ответ написан
    Комментировать
  • Xорошие статьи про защиту в php?

    Adamos
    @Adamos
    Входящие данные не надо защищать. Их нужно очищать от потенциально опасных включений.
    Если данные пойдут в базу - пропускать их через плейсхолдеры и никогда не включать в запросы "сырые" строки.
    Если данные будут выводиться пользователю - превращать любые символы, используемые в разметке, в HTML-версию этих символов.
    Если данные сохраняются в файлы - убедиться, что в этих файлах именно данные ожидаемого типа и что они недоступны по прямому запросу.
    Ну, и внутренняя логика не должна зависеть от входящих данных - все управляющие элементы должны оставаться на сервере, так как снаружи может прийти все, что угодно. В принципе.
    Конец статьи.
    Ответ написан
    Комментировать