Ответы пользователя по тегу MySQL
  • Возможно ли сделать ORDER BY FIELD из вложенного запроса?

    @ollisso
    Вопрос не понятен.

    В ваш запрос :
    Order by loginfo.id

    Если не по id надо, то легче всего добавить столбик orderid и делать order by orderid
    Ответ написан
  • Можно подобное преобразование массива сделать без цикла?

    @ollisso
    Если задача преобразовать такой результат:
    id, name, var
    1, name1, 10
    2, name2, 10
    3, name3, 30

    в такой:
    array(
    id => array(0 => 1,0 => 2,0 => 3),
    name => array(0 => name1,0 => name2,0 => name3),
    var => array(0 => 10, 0 => 20, 0 => 30),
    )


    то код в принципе работает.

    И повысить прозводительность его особо не получится, а если получиться то на сотые процента, т.е. это как экономия на спичках.

    Вопрос вам: вы уверены что это самая важная часть кода которую надо оптимизировать в первую очередь ? :)
    Ответ написан
    Комментировать
  • Откуда быстрее получать информацию, mysql или файл?

    @ollisso
    Способы решения:
    1. читаем из файла всегда
    2. читаем 1 раз, храним где либо:
    2.1. в БД
    2.2. в xml или csv
    2.4. в json
    2.5. в виде пхп кода

    Для того чтобы ответить на вопрос, нужно знать следующее:
    1. как часто читается файл после обновления, насколько это критично чтобы работало быстро ?
    2. Размер файла
    3. Как именно читается - нужно читать все строки из него, или всего несколько?
    4. Что с файлом дальше делается ? Например если после чтения выводим просто хтмл реестр, то почему бы его сразу не готовить, и не хранить его?
    5. Ссколько много времени на разработку.

    Простой пример кейса:
    система уже работает, файл читается 1-2 раза в неделю.
    В данный момент из оригинального файла читается около секунды
    Особых лагов нет.
    На разботку метода конвертация уйдёт 1-2 дня.

    => Выгоды нет по замене

    Другой пример:
    1. файл читается каждый раз раз в секунду.
    2. из файла нужно 1-10 строк всего, по номеру
    3. В файле миллионы строк

    => лучше хранить в базе обычно.

    третий пример:
    1. файл читается каждый раз раз в секунду.
    2. файл нужен всегда весь
    3. В файле миллионы строк

    => лучше хранить в пхп коде

    Т.е. способы хранения данных таковы:

    1. БД
    + быстрая выборка, когда нужно несколько элементов из миллиона
    + можно использвоать в качестве данных для других запросов (джойны и тп)
    - временные издержки

    2. XML/CSV
    + можно использовать как есть, если нужен этот формат для чего либо другого.
    - очень "дорого" парсить файл каджый раз.
    Не рекомендую если нет особых причин

    3. JSON
    + Относительно быстро
    + удобно хранить
    + на некоторых данных быстрее чем ПХП (что странно)
    - надо парсить, опкешеры не помогают
    - невозможно брать только часть элементов. Если нужно 10 строк из миллиона, то придётся брать весь миллион в память.

    4. PHP
    Тут я имею в виду: хранить через var_export и подключать через require/include
    Обязательно: чтобы был APC/opcache
    + быстро
    + удобно хранить. обрабатывать. Получаешь сразу же массив
    - невозможно брать только часть элементов. Если нужно 10 строк из миллиона, то придётся брать весь миллион в память.
    - иногда JSON быстрее

    Что вам выбрать лучше - сложно сказать, вы не предоставили достаточно данных.
    Я бы взял PHP или БД, в зависимости от ситуации.
    Ответ написан
    Комментировать
  • Как решить проблему с конкуренцией запросов на чтение в PHP?

    @ollisso
    mysql_query("UPDATE `page` SET `views` = `views` + '1',status=IF(views>=10,'off','on') WHERE `status` = 'on' AND `id` = '1' and views < 10);
    
    $changed= mysql_affected_rows();
    
    if($changed){
    // пускаем 
    }else{
    mysql_query("UPDATE `page` SET `views` = `views` + '1'  WHERE `status` = 'on' AND `id` = '1');
    // закрыто
    }


    Т.е. основная идея:
    1. обновляем счётчик , но только если мы можем увидеть страницу
    2. сразу же проверяем, сработал ли апдейт. Если сработал- то ок, если не сработал, то значит:
    1. заход не подсчитан, надо добавить счётчик.

    Если вам не нужно считать тех кто не зашёл - то не добавляйте второй апдейт.
    Ответ написан
    Комментировать