Ответы пользователя по тегу MySQL
  • Как оптимизировать запросы к бд в ZF?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    тут собственно встает вопрос о том как и что нужно обновить.
    Можно для нескольких записей выставить одинаковое поле если задать WHERE содержащие несколько id строк. например
    WHERE `id` IN(1,2,8)
    если же нужно установить разные значения для разных строк. Не могу с уверенной точностью сказать где, но видел систему которая собрала все запросы на обновление и удаление строк в один запрос(конкатерацией) и собственно так можно тоже сделать.
    Или использовать конструкцию типа
    UPDATE `tbl` SET `field` = CASE
    WHEN id = 1 THEN 123;
    WHEN id = 2 THEN 456;
    …
    END
    WHERE `id` IN (1,2,8)

    Но вот как это реализовать на zf1 честно не знаю почитай документацию.
    Ответ написан
  • Сложный запрос mysql в php. В чём ошибка?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    $qr_result = mysql_query($sql); //исправил
    or die(mysql_error());

    1. Между функцией mysql_query($sql) и or die(mysql_error()); не должно быть точки с запятой.
    2. При подключении к базе нужно передать команду с присвоением кодировки:
    mysql_query("SET NAMES UTF8") or die('Не получилось выставить кодировку');

    Попробуйте может в этом и весь подвох собственно. Если у вас нет синтаксических ошибок. либо еще каких подводных камней о которых мы не знаем.
    Ответ написан
  • Как сделать грамотное условие для запроса к БД? с JOIN?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    SELECT `table1`.`lol`, `table2`.`name`
    FROM `table1`
    LEFT JOIN `table2` ON `table2`.`id` = `table1`.`id`
    Ответ написан
  • Есть ль готовые решения или плагины для онлайн чата между пользователями на сайте?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Поднимайте websocket.
    На связке "ajax + mysql + php" реализовать данный функционал технически не возможно ввиду устройства протокола HTTP.
    Ответ написан
  • Система бана на MySql, будет ли это работать?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    таблица users поле ban (boolean) при авторизации получаем это поле если TRUE то высылаем. на страницах к которым есть доступ у пользоателей делаем проверку что пользователь авторизировался. Забаненый пользователь не получает авторизации а следовательно находится на сайте как гость.
    Ответ написан
  • Как сделать оповещение на сайте с помощью php + mysql + ajax для большого количества пользователей?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Реализация просто ужасная. но если все же нужно то стоит выучить двунаправленные протоколы. через HTTP теоретически и технически ничего хорошего получится не может.

    "на сайте делается запрос аля comet, ожидает ответа, если ответа нет,
    то через 2 минуты делает новый запрос, и все до тех пор, пока цикл php не выдаст ответ."

    Бесполезная трата ресурсов. Если ничего не происходит вы в холостую гоняете циклы. Для справки каждый процесс пхп минимум требует около мегабайта. оперативной памяти (а зачастую больше) Умножте на количество клиентов и вы поймете что отдавать (на вскидку могу сказать что тут будет примерно по 1,4 мб в среднем) около 700 мегабайт оперативной памяти на холостую обработку слишком жирно.

    теперь представим что мы отказались от циклов на сервере давайте запустим цикл на клиенте? А че? просто на джава скрипте каждые 5 секунд отправляем запрос на сервер скрипт обработчик делает запрос на табличку просто на наличие записей с галочкой new. обрабатывается запрос не долго в считаные милисекунды да еще и все-го лишь каждые 5 секунд лепота... Но клиент сволочь! он вздумал средней кнопкой мыши вкладки открывать! Да еще и по 10 штук! да еще и откроет и не закроет и пойдет свою сантабарбару смотреть! Нативный ДДОС самого себя по другому.

    Как бы вы не пытались найти решение. Но самый грамотный и правильный ответ на ваш вопрос - На связке "ajax + mysql + php" реализовать данный функционал технически не возможно ввиду устройства протокола HTTP.
    Ответ написан
  • Как вывести данные в цикле из mysql?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Укажу старый добрый метод mysql для простоты. А вообще начни не с практики а с мануала php.net/manual/ прочитай минимум один раз а потом уже задавай вопросы. ну или хотябы почитай про массивы.
    $content = array();
    
    while ( $res = mysql_fetch_assoc( $query_result ) )
    {
        $content[] = $res;
    }
    
    print_r($content);
    Ответ написан
  • Таблица отношений пользователей. Как правильно?

    socengel
    @socengel
    7 лет native php в продакшене, онлайн 20000+,
    Правильная таблица отношений:
    Отмечу на всякий случай никаких id(самих записей) не должно быть! все выборки по ключам приведенным ниже
    user_id|friend_id|relation_id|date(timestamp)
    222|444|1|ts
    444|222|2(не просто дружит а например встречается, женат, и т.п. для каждого случая свой уникальный id)|ts

    первичный ключ составной (user_id,relation_id)
    дополнительный ключ (friend_id, relation_id)

    если кидают заявку создается 1 запись user_id>friend_id>0

    проверка на поступившие заявки friend_id(current_user_id) | relation_id = 0

    подтверждение: (должна быть транзакция!) то есть если отвалится один из запросов нужно вернуть все как было.
    на MyISAM ручками(средствами PHP проверяем). На innodb делаем транзакцию средствами БД.
    вписываем строчку с подтверждением курент_юзер > фриенд_ид > relid - 1 и обновляем основную заявку до единицы. Повторюсь если одна из команд не пройдет надо все откатить.

    если отказ то удаляем основную заявку из базы.

    по поводу дополнительных отношений:
    кинуть заявку можно только пользователю у которого взаимно стоит 1 и проверка собственно на заявки
    friend_id(current_user_id) | relation_id >(больше) 1.
    Остальной алгоритм тот же. одновременно у 1 пользователя может быть только одна запись с отношением больше 1 (желательно, это как индикатор именно личного отношения, для группировки друзей лучше все же завести отдельное поле)
    Описание с реальной базы данных на 30 миллионов пользователей.
    Ответ написан