• Как посчитать количество строк с group by'ом?

    @viktorross Автор вопроса
    Спасибо, но выдает ошибку #1248 - Every derived table must have its own alias
    я сделал так, вроде бы работает , не уверен правда грамотное ли это решение
    select sum(couaant) from ( 
    SELECT class_a.id,  (select count(*) from class_a where class_a.id = `class_p`.p_id) as couaant
        FROM class_a 
        LEFT JOIN `class_p` 
        ON `class_a`.id = `class_p`.p_id
        WHERE class_a.cat_id = 1
        AND (`caption`,`value`) IN (('type','1'), ('type_2','2')) 
        GROUP BY class_a.id 
        HAVING COUNT(DISTINCT caption, value) = 2
    )
    Написано
  • Как посчитать количество строк с group by'ом?

    @viktorross Автор вопроса
    viktorross, а вот если завернуть в select sum(count) from ( …), то считает все в одну строку, не знаю правильно ли это конечно
    Написано
  • Как посчитать количество строк с group by'ом?

    @viktorross Автор вопроса
    kisaa, так тоже 20 строк высыпается, только значение count’ов уже 1 , а не 2
    Написано
  • Как внутри массива найти значения с разделителем и разбить эти строки?

    @viktorross Автор вопроса
    Михаил Ливач ThunderCat Спасибо, но у меня все равно проблема с реализацией, сначала я удаляю пустые значения, затем убираю ненужные значения из запроса, а уже потом привожу значения в тот вид, в котором в дальнейшем надо будет занести в бд. Однако, получается так, что array_filter удаляет и значения типа field_4 = Array, я так понимаю, что их нужно разложить внутри foreach циклом while, именно в таких полях хранятся значения типа "1|2|3|4"
    Как во-первых их не удалить или куда перенести array_filter и как конкретно найти потом такие поля 1|2|3|4" и разложить их внутренним циклом чтобы каждое такое значение приобрело вид field_4 = 1;field_4 =2;field_4 =3;field_4 =4; ?
    в конечном счете я хотел получить вот такой результат

    field_4 = 1;field_4 =2;field_4 =3;field_4 =4;field_5 = привет;field_6 = пока;field_7 = что-то еще;field_7 = что-то еще 1111;

    $del_keys = array('field_1','field_2','field_3');
    $i = [];
    foreach (array_filter($list,"trim") as $key => $elem) {
    if(!in_array($key, $del_keys )) {
    $i[$k] = $key.'='.$elem;
    }
    }
    var_dump($i);
    Написано
  • Как грамотно сделать поиск по фильтрам и где хранить характеристики?

    @viktorross Автор вопроса
    ThunderCat, спасибо, сейчас как раз вернулся к этому моменту. Я все равно не совсем понимаю как именно мне производить поиск по товарам и как выстроить цепочку запросов для поиска, просто по тому как я это понял, у меня получится огромный список Id товаров, который разве что получится в конечном счете вставить в IN, но это тоже не вариант, товаров будет например 500 , это не выход. Сейчас у меня бд(MySQL) выглядит так, таблица со списком фильтров связанная с категориями и таблица с товарами, когда человек выбирает фильтры, то названия полей в таблице с фильтрами имеют такое же название в таблице с товарами, ну и соответственно так и ищу. Но я не понимаю как должна выглядеть промежуточная таблица в которой будут храниться свойства товаров? К одному товару 50 записей что ли добавлять на каждую позицию? Например таблица будет иметь 3 столбца(product_id, name_filter, attribute), допустим я буду искать в этой таблице по названию фильтра и атрибуту, допустим что-то найду, например 500 записей, получу их product_id, а дальше что с этим делать? Вставить 500 штук Id в in и вытащить эти товары из таблицы где хранятся все товары? В конечном счете получается все равно очень тяжелый запрос, на этом моменте торможу, или вообще должна быть другая логика?

    ___
    Сейчас подумал ещё, как вариант left join’ом тянуть совпадающие Id, на сколько это сложные будут запросы?
    Написано
  • Как грамотно сделать поиск по фильтрам и где хранить характеристики?

    @viktorross Автор вопроса
    Ипатьев, т.е если я создам в одной таблице 1500 полей, если это вообще возможно, то никаких дополнительных нагрузок и особых проблем не возникнет? Мне казалось, что поиск сразу по 10 -15 полям в таблице с 200 полями медленнее, чем скажем в таблице в которой 50-70 полей. Сколько вообще в MySQL максимум полей может быть на одну таблицу, где-то написано 4096, где-то 266? Если потребуется больше, чем доступно, добавлять ещё одну таблицу и просто искать уже по полям из 2 таблиц? Например в одной будет тогда 4096 полей и в другой ещё столько же, хотя поиск по факту будет исключительно по максимум 10-20, нормально все пройдёт? Просто не хочется зря время потратить, и потом переделывать
    Написано
  • Почему постраничный вывод данных из бд не работает?

    @viktorross Автор вопроса
    Ипатьев, ну получается по 24 записи на каждую страницу, т.е 3 страницы 72 записи, а как вывести остальные 10 записей, которые должны уйти на следующую страницу по идее?
    Написано
  • Как отправить файл через js на сервер?

    @viktorross Автор вопроса
    Михаил Р., Mikhail Osher
    удалось преобразовать файл с помощью Uint8Array, теперь задача превратить эти данные в файл на стороне сервера

    Uint8Array(200553) [255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 1, 0, 96, 0, 96, 0, 0, 255, 219, 0, 67, 0, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 3, 2, 2, 3, 3, 6, 4, 3, 3, 3, 3, 7, 5, 5, 4, 6, 8, 7, 9, 8, 8, 7, 8, 8, 9, 10, 13, 11, 9, 10, 12, 10, 8, 8, 11, 15, 11, 12, 13, 14, 14, 15, 14, 9, 11, 16, 17, 16, 14, 17, 13, 14, 14, 14, 255, 219, 0, 67, 1, 2, 3, 3, 3, 3, 3 ........
    Написано
  • Как отправить файл через js на сервер?

    @viktorross Автор вопроса
    IvanU7n, спасибо, это уже увидел, не понятно только теперь как превратить файл в бинарные данные, я так понял с помощью arraybuffer, но больше информации не нашел по поводу его применения в моем случае и тем более как в php обратно собрать в файл
    Написано
  • Как отправить файл через js на сервер?

    @viktorross Автор вопроса
    IvanU7n, это websocket, вы правы, в этом и причина видимо
    Написано
  • Как отправить файл через js на сервер?

    @viktorross Автор вопроса
    Сергей delphinpro conn это подключение в websocket, в целом media отправляется и в моем варианте на сервер в качестве массива, вопрос в другом, как из этого массива извлечь правильно файл, потому что я пытался по разному, но в бд идет вставка либо array, либо null ..
    Написано
  • Как сгруппировать по убыванию?

    @viktorross Автор вопроса
    alexalexes, та же самая история вроде бы, он просто выкатывает все записи, без группировки, как это делает group by, по сути-то нужно чтобы он взял все class_messages_chat.chat_id, где соответствуют поля
    `class_messages_chat`.`to_user_id` =133337 или `class_messages_chat`.`from_user_id` = 133337, нашел эти chat_id в таблице class_messages и выдал последние записи, понятно, что там еще несколько таблиц участвует, но по ним группировок нет, сама суть именно в последних chat_id, но это видимо крайне сложно решить, хотя выглядит просто
    65d4a0dfaca5e854254023.png
    Написано
  • Как сгруппировать по убыванию?

    @viktorross Автор вопроса
    alexalexes,
    1.65d4959c692d2003304695.png
    2.65d495a77491d895686624.png
    3.65d495bb3478a070350722.png
    Написано
  • Как сгруппировать по убыванию?

    @viktorross Автор вопроса
    alexalexes, спасибо, вот это вроде бы работает как надо, записи идут начиная с большего class_messages.id , но теперь нет группировки, т.е выводятся все существующие записи в нужном порядке, а сгруппировать их нужно по class_messages.chat_id

    select B.*
    from (SELECT A.*,
             @prev as before_prev, 
    @rn as before_rn,
    IF(@prev <> A.chat_id, @rn:=1,@rn), @prev:= A.chat_id, @rn:=@rn+1 AS rn,
    @prev as after_prev, 
    @rn as after_rn
    from (
    SELECT
        `class_messages`.`id` as mess_id,
        `class_messages`.`chat_message`,
          `class_messages_chat`.`to_user_id`,
           `class_messages_chat`.`from_user_id`,
           `class_users`.`id`,
           `class_users`.`user_status`,
           `class_users`.`online`,
           `class_messages_chat`.`chat_id`,
           `class_messages_chat`.`ad_id`,
           `class_ads`.user_id,
           `class_ads`.title
        FROM `class_messages_chat`
        inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
        INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
        inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`
    WHERE (   `class_messages`.`to_user_id` = 133337
           or `class_messages`.`from_user_id` = 133337)
    and class_messages_chat.chat_id 
    order by class_messages.id desc
    ) A,
    (SELECT @rn:=1)rn,
         (SELECT @prev:=-1)prev
    ) B
    Написано
  • Как сгруппировать по убыванию?

    @viktorross Автор вопроса
    alexalexes, спасибо огромное, теперь второй работает, но возвращает 0 результатов, а первый вариант также ошибку выдает, но уже на другом месте

    #1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около '(partition by `class_messages_chat`.`chat_id` order by class_messages.id desc) r' на строке 13
    Написано
  • Как сгруппировать по убыванию?

    @viktorross Автор вопроса
    alexalexes, все равно ошибка там же..

    #1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около '(
    SELECT
          `class_messages_chat`.`to_user_id`,
           `class_messages_cha' на строке 4
    Написано
  • Как сгруппировать по убыванию?

    @viktorross Автор вопроса
    alexalexes, пишет, что нарушен синтаксис около
    (
    SELECT
          `class_messages_chat`.`to_user_id`,
    , в таком запросе я не смогу исправить ошибку..
    Написано
  • Как сгруппировать по убыванию?

    @viktorross Автор вопроса
    alexalexes, спасибо большое, но у меня версия 5.7, забыл уточнить сразу, как в этом случае быть?
    Написано
  • Как сгруппировать по убыванию?

    @viktorross Автор вопроса
    Adamos, это я пробовал так сделать, потом нашёл, что так не вариант
    Написано
  • Как отключить кеширование скриптов php ratchet?

    @viktorross Автор вопроса
    Виталий Артемьев, даже при перезапуске старый код, он потом через минут 20-30 обновляется..
    Написано