Задать вопрос
  • Как объединить строки в sql?

    @alexalexes
    Тут еще могут быть вопросы к архитектуре таблицы.
    Если id предполагает роль первичного ключа, то почему он таковым не является, почему есть необходимость извлекать дубликаты?
  • Как вывести данные в loadTpl?

    @alexalexes
    В итоге, что в файле /last_news/news.html?
  • Как вывести данные в loadTpl?

    @alexalexes
    А для новостей как шаблон выглядит?
    При переборе строк новостей вы не передаете параметры для шаблона элемента новостей. Странновато...
    $lastNewsList .= loadTpl("/last_news/news.html");
    В покупателях такое ведь используется.
    $lastBuyerList .= loadTpl("/last_buyers/buyer.html",
    //тут передаются в шаблон параметры покупателя
     [
                'buyer' => $buyer,
                'name' => $goods_name,
            ]
    );
  • Почему выдается предупреждение [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated?

    @alexalexes
    Скорее всего, непонятно то, что $.ajax эксплуатирует объект XMLHttpRequest, которому нужно сообщить свойство async.
  • Что стоит заносить в css переменные?

    @alexalexes
    Смотрите концепцию метаописаний css - Sass. Она целиком и полностью это эксплуатирует.
  • Не получается добавить данные в поля через SQL?

    @alexalexes
    Обратите внимание на запятые в VALUES.
  • Стоит ли использовать двойные foreach?

    @alexalexes
    Два уровня каталогов ваш код будет обходить, если для решения какой-то практической задачи этого достаточно, то это достаточно.
    А вот, если потребуется обойти все дерево вложенных каталогов, то нужна рекурсивная функция.
    PS: Тут у вас закралась опечатка. Scandir извлекает перебираемый объект, а в foreach вы ее ставите не на месте перебираемого объекта (до as), а в качестве текущего элемента (после as).
    ....
    $names = scandir($path);
        ^    
    foreach ($names as $name){
                 ^
    ....
  • Как проще всего сделать выборку количества каждого типа?

    @alexalexes
    Скорее всего в итоге вам следует написать два отдельных запроса для подсчета показателей для статуса 1, и отдельно для статуса 3, но по типам.
    В принципе, можно соединить в один запрос, но будет такая вот сборная солянка, как в варианте 4. Да, запрос будет выводить результаты не по колонкам, построчно.
  • Как проще всего сделать выборку количества каждого типа?

    @alexalexes
    Требуется получить кол-во записей для этого пользователей с status = 1

    Непонятка с окончанием слова "пользователей" дает два предположения насчет точной формулировки:
    Требуется получить кол-во записей для конкретного пользователя, где status = 1

    или
    Требуется получить кол-во записей для каждого пользователя, где status = 1

    В первом случае будет задан входной параметр user_id, во втором - получены цифры по каждому пользователю.
    ---
    Второй момент.
    а так же вывести кол-во каждого типа, причем выбирать только из тех у которых status = 3

    Посчитать количество в пределах всей выборки example ?
    ... в пределах одного пользователя ?
    Тут тоже уточните.
  • Как вытащить несколько значений в одном запросе?

    @alexalexes
    Если свойства s.productCategoryId и s.accessoryCategoryId могут быть null в записях Scenario, то используйте left join при присоединении таблиц Category. Если не могут быть null (обязательные свойства), то просто join (или inner join).
    Собственно, что выбрать, оперируйте условием where.
    Если у вас строго join, то скорее всего вариантов тут не много:
    ...
    where s.productCategoryId = :id
    or s.accessoryCategoryId = :id

    Если left join, то можно оперировать не только наличием совпадения по :id категории, но и наличием (отсутствием) соседнего свойства:
    ...
    where (s.productCategoryId is null or s.productCategoryId = :id)
    and (s.accessoryCategoryId is null or s.accessoryCategoryId = :id)

    ...
    where (s.productCategoryId is not null or s.productCategoryId = :id)
    or (s.accessoryCategoryId is not null or s.accessoryCategoryId = :id)
  • Как вытащить несколько значений в одном запросе?

    @alexalexes
    Что означают поля s.productCategoryId и s.accessoryCategoryId, в чем их назначение в вашей структуре данных?
    PS: Чтобы не воевать с синтаксисом ORM, лучше всего задачу разбирать на чистом SQL.
    Ваш вариант решения будет выглядеть вот так:
    select s.id,
              s.title,
              s.quantity,
              s.productCategoryId,
              cl.name as productCategoryName,
              a.name as accessoryCategoryName,
              s.products,
              s.attributes,
              s.accessoryCategoryId,
              s.accessories
      from Scenario s
       left Join Category cl on s.productCategoryId = cl.id_category
       left Join Category a on s.accessoryCategoryId = a.id_category
      where s.id = :id

    PPS: Что хотите выбрать?
    Несколько разных строк из таблицы Scenario?
    Это будет вот так:
    ...
    where s.id in (:id1, :id2)

    Несколько строк в диапазоне из таблицы Scenario?
    Так:
    ...
    where s.id >= :id1
    and s.id <= :id2

    Строки из Scenario, которые имеют хоть одно свойство по категориям?
    ...
    where s.productCategoryId = :product_cat_id
    or s.accessoryCategoryId = :acc_cat_id

    Строки из Scenario, которые которые имеют одновременно два свойства категорий?
    ...
    where s.productCategoryId = :product_cat_id
    and s.accessoryCategoryId = :acc_cat_id

    ... одно из свойств категорий может быть не задано?
    ...
    where (s.productCategoryId is null or s.productCategoryId = :product_cat_id)
    and (s.accessoryCategoryId is null or s.accessoryCategoryId = :acc_cat_id)
  • Как составить такой запрос с поиском по тегам?

    @alexalexes
    Если у вас еще есть таблица Tags, которая содержит свойства тегов, например, его наименование, а таблица postTags является промежуточной таблицей для организации связи "многие ко многим", то тут вполне корректно по архитектуре с точки зрения классического реляционного подхода.
    Да, запросы к такой структуре могут выглядеть пугающими и они будут не самые быстрые.
    Если есть проблемы в производительности, то к дополнению к основной структуре таблиц разработчики могут дополнять архитектуру еще таблицами, которые не нормализованы сильно и используются в качестве кэша (если нужно искать посты, где есть некоторый набор обязательных тегов, то в такой кэш-таблице будет одно поле со всеми тегами для одного поста и используем поиск по строке, либо разбор json, если СУБД позволяет использовать этот тип данных). Кэш-таблицы не универсальны, они заточены под определенный поиск данных и могут быть сильно избыточны по объему.
    PS: Для ускорения могут еще использоваться другие инструменты стека приложения, но это совсем другая история.
  • Как составить такой запрос с поиском по тегам?

    @alexalexes
    Поправил решение. Нужен оконный вариант функции count. Если будете испытывать на mySQL ниже 8 версии, то нужен будет велосипед с пользовательскими параметрами, чтобы сделать аналог такой функции.
    PS: Прелесть такого решения в том, что group by не нужно прописывать, окно его инкапсулирует по своей сути.
  • Как составить такой запрос с поиском по тегам?

    @alexalexes
    Попробуйте решение 2.
    Проверьте оба решения на производительность, distinct может оказаться коварнее, чем куча лишних join.
  • Как сделать SQL-запрос выбора по значениям метаданных?

    @alexalexes
    Приведите фрагмент данных таблицы и какую итоговую выборку надо получить из этого фрагмента.
  • Как найти дубли в массивах postgres?

    @alexalexes
    Вместо:
    translate(c.qualification_documents,'{}','')
    Используйте:
    replace(replace(c.qualification_documents,'{',''),'}','')

    Эта функция нужна, чтобы обрезать начальные и конечные фигурные скобки.
    Дано: '{1,2,3}'
    Для этой строки порядок действий такой:
    1. translate - убираем скобки -> '1,2,3'
    2. string_to_array - преобразуем строку в тип данных массив -> [1,2,3]
    3. unnest - разворачиваем массив на несколько строк -> первая строка: 1, вторая: 2 ...
    4. cast - в каждой строке преобразуем значение колонки в целое число.
    Все, теперь можно использовать в SQL.
    PS: Если атрибут qualification_documents уже по типу данных является массивом, то шаги 1, 2 и 4 не нужны, куча вложенных функций заметно уменьшится.
    Скорее всего, в вашем случае достаточно использовать unnest (добавил решение Б).