Задать вопрос
  • Что стоит заносить в 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 (добавил решение Б).
  • Почему не работает рекурсивный вызов?

    @alexalexes
    sort = sort.sort()
    ; поставьте в конце, лучше не бросайте операторы без него, даже если JS позволяет это делать.
    Когда дописывать код будете, то споткнетесь об эту фичу.
  • Как преобразовать запрос в файле sql в формат json?

    @alexalexes
    Если это бэкап базы, то нужно взять из файла строки под insert предложением - это данные таблицы (скорее всего это и будет основное "сырье" для парсинга).
    Нужно пропускать конструкции, которые реконструируют структуру базы, например, создание таблиц, функций, процедур и т.д.
  • Как найти картинки с прозрачным фоном?

    @alexalexes
    Как идею решения в лоб можно использовать следующие шаги.
    1) Обрабатывать только те файлы, форматы которых могут записывать сведения о прозрачном цвете (gif, png).
    2) При загрузке данных текущего файла изображения использовать ту функцию, которая позволяет получить сведения о цвете пикселя с параметром альфа-канала.
    3) Пробежаться по всем пикселям изображения и подсчитать число пикселей, которые имеют значение альфа-канала не более некоего фиксированного порога M значения прозрачности.
    4) Получить долю (%) прозрачных пикселей по критерию 3 от общего количества пикселей.
    5) Если эта доля больше некоего фиксированного порога N (%), то считаем, что в изображении преобладает прозрачный цвет (возможно, он будет фоном, но это не точно).
  • Не могу выйти из безопасного режима?

    @alexalexes
    Узнать, каким способом был создан ключик в процессе установки опции шифрования диска, и собственно, воспользоваться им. Не обязательно, что ключ лежит в учетке MS.
    https://support.microsoft.com/ru-ru/help/4530477/w...
    PS: Не будет ключа - не будет доступа к данным, ничего не попишешь.
  • Как найти связанные элементы с разных таблиц?

    @alexalexes
    Структура у вас такая будет:
    1) wall - id, message
    2) attachments - id, wall_id, path
    где wall_id ссылается на запись таблицы wall.
    Проблема в том, что если вы хотите сохранять записи вложений первыми, то вы не знаете какой вставить wall_id.
    Есть куча вариантов как это решить.
    Вариант 1.
    Когда создается сообщение, клиент отправляет сразу и сообщение и вложения.
    Тут сложностей со вставкой нет. Сохраняем запись wall, получаем его wall_id, используем для вставки вложений.
    Вариант 2.
    Мы не можем создать "честную" запись wall сразу, не отправив заранее записи вложений.
    Решений варианта 2 первое.
    Сохраняем записи вложений с опущенным параметром wall_id, например wall_id приравниваем null.
    Когда добавляем запись wall, то известный wall_id вписываем в записи вложений, где было null.
    Но учтите, если в вашей системе будет несколько пользователей, то нужно как-то различать, какой пользователь или сеанс пользователя мусорит несвязными записями вложений во время редактирования сообщения.
    Для этого в таблице вложений должен использоваться дополнительный атрибут, указывающий на user_id или на его сеанс session_id, так:
    attachments - id, wall_id, user_id, path
    или так:
    attachments - id, wall_id, session_id, path
    И при связывании нужно брать не просто wall_id is null записи, а указывать, что брать нужно записи конкретного пользователя или сеанса.
    Если пользователь бросил редактирование сообщения без сохранения, и при этом он оставил какие-то несвязные записи, то в вашей системе нужно предусмотреть скрипт, который будет периодически подчищать несвязные записи.
    Для определения давно ли добавили записи, чтобы удалять сильно устаревшие, в таблице вложений нужно предусмотреть атрибут даты и время создания вложения. Чтобы можно было легко написать запрос, который подчистит эти старые записи, учитывая их время создания.
    Решение варианта 2 второе.
    Создаем временную запись wall, как только пользователь запросит форму создания сообщения.
    Те же проблемы отслеживания временно созданной записи wall и пути решения такие же как в случае несвязных вложений.