Задать вопрос
  • Как с помощью while вывести подсчет количества строк в одной таблице по совпадению с данными из другой?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Во-первых, зачем тут первый запрос?
    Во-вторых, кроме количества совпадений надо наверное запрашивать и сам id? Ну по логике? если мы хотим вывести id, то надо наверное это поле указать в SELECT?
    В-третьих, надо добавить группировку, GROUP BY
    В-четвёртых, если надо вывести любые значения из первой, а не только те, у которых есть записи во второй, то нужен LEFT JOIN
    Ответ написан
    Комментировать
  • Какие основные понятия в ООП?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    • Инкапсуляция - это самое простое. В объекте лежат данные и методы для работы с ними (причём данными могут быть и другие объекты. см. Композиция). Самое главное в инкапсуляции - не переборщить. Инкапсулировать только то, что относится одной конкретной задаче. Всё остальное делегировать другим объектам (см. Композиция).
    • Наследование - это тоже самое простое и самое опасное. Захотел добавить новый функционал к уже существующему классу - унаследовался, дописал методик - и в путь! А потом исходный класс поменяли, и он стал ломать поведение унаследованного. Лучше всего взять себе за правило наследоваться только от абстрактных классов. А поведение менять с помощью свойств-объектов других классов (см. Композиция).
    • Полиморфизм. Один метод - поведение разное. Проще всего достигается за счёт использования свойств-объектов других классов (см. Композиция).
    • Композиция - это самое интересное. Объект действует не сам по себе, а с помощью свойств-объектов, которые передаются в конструктор при создании объекта. Например, у нас есть класс Модели, который должен уметь делать КРУД. А точнее сам по себе он содержит только данные, а в качестве зависимости в него передаётся объект для работы с БД, имеющий собственно эти самые методы create(), read(), update() и delete(). И вот этот объект может быть как инстансом класса, работающего, например, с Mysql, а может быть - работающего с Редисом. И теперь, в зависимости от наших потребностей, одна и та же модель может сохраняться как в Редис, так и в РСУБД. Без изменения и единственной строчки кода!
    Ответ написан
    1 комментарий
  • Как на Laravel суммировать данных из таблицы BonusApps и сохранить их в таблицу USERS (COLUMN BONUS)?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем случае (а особенно - начинающим) ничего сохранять в таблице USERS не нужно.
    А "чтобы передать апишки и так далее" надо просто запросить эти бонусы из таблицы бонусов, просуммировать, и передать куда надо.
    Ответ написан
  • БД или JSON? Можно ли?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это вопрос из серии, "можно ли построить самолёт из одной бумаги, или всё-таки понадобится ещё дерево".
    Игрушечный самолётик можно.
    Реальный полетит вертикально к земле.

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как правильно заметили выше, неопределенный по размеру массив данных в БД - это таблица.
    Ответ написан
    Комментировать
  • Как правильно составить структуру массива?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. зачем getBoxData возвращает вложенный массив?
    2. зачем все последующие элементы $boxData добавляются в первый элемент, вместо того чтобы добавлять все элементы в исходно пустой массив?
    Ответ написан
  • Почему слетают стили и картинки при изменении роутера?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну как обычно, относительные пути в картинках.
    Пути к локальным ресурсам всегда должны представлять собой абсолютный путь от корня сайта.
    Ответ написан
    1 комментарий
  • Как быстро добавлять / обновлять миллионы строк в БД Laravel?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для сферического обновления в вакууме не нужно вообще ничего.
    БД спокойно по умолчанию пишет десятки тысяч строк в секунду.
    То есть просто записывать и всё.

    При возникновении конкретных проблем надо собраться с мыслями и задать конкретный вопрос, детально описывая проблему. А не вот это вот "ну у нас там много всего и растёт нагрузка".

    В качестве чисто гадательной рекомендации поиграться с innodb_flush_log_at_trx_commit / транзакции.
    Ответ написан
    Комментировать
  • Почему моя программа не работает так, как надо?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Иногда я смотрю на qna и удивляюсь. На букву о.
    Казалось бы, задачка примитивная, для первого класса, ошибки очевидные.
    Сейчас автору всё объяснят.
    Но тут собирается консилиум лучших умов, и начинается. "Дело тёмное, ничего непонятно...", "открывай файл на чтение", "файл надо переименовать".

    Судя по всему, задача действительно очень сложная, так что одними наводками не получится, надо привести полное решение

    filename = input('Введите имя файла: ')
    file1 = open(f'D:\\Txtfiles\\{filename}')
    contents = file1.read()
    print(contents)
    file2 = open(r'images\3.txt', 'w')
    n = 0
    file1.seek(0)
    for line in file1:
        n += 1
        file2.write(str(n) + ')' + line)
    file1.close()
    file2.close()

    можно так, а можно как Алан Габизов предложил, через splitlines
    Ответ написан
    4 комментария
  • Как правильно отправить в базу данных сразу несколько ссылок на картинки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    То есть весь вопрос сводится к "при записи я кодирую данные c помощью json_encode, а при выводе не раскодирую, но виноваты создатели этого сайта".

    Но главные проблемы этого кода конечно не в json.
    Во-первых, этот код позволяет заливать РНР файлы, и первый же малолетний придурок этим воспользуется.
    Во-вторых, этот код пропускает SQL инъекцию, и первый же малолетний придурок этим воспользуется.
    Остальное уже мелочи.

    Но если отвечать на вопрос в целом, то да - вставлять все ссылки в одно поле это действительно неправильно.
    Плюс, в БД всегда должны храниться только сырые данные, а любое форматирование добавляться только при выводе. То есть сохранять надо только сами имена файлов.

    Но в данном случае вообще непонятно, зачем сохранять ссылки в БД.
    При заливке берётся id созданного пользователя, создаётся папка с таким именем, и в неё заливаются файлы.
    При выводе файлы читаются из этой папки и выводятся.
    Ответ написан
  • Как данный код будет выглядеть на php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    скорее так
    foreach ($this->tests as $key => $value) {
       $this->tests[$key] = Test::clearLines($test);
    }
    Ответ написан
  • Как открыть php файл из html файла?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    так же, как и на любой другой
    Ответ написан
  • Есть ли listIterator в php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Обычно итераторы в РНР не нужны - всё делается простейшими средствами типа foreach.
    Я так понимаю, что в данном случае нужен обычный оператор присвоения
    $this->test[] = ...
    Ответ написан
  • Как правильно работать с базой данных?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ответ написан
    Комментировать
  • Правильно ли составлена схема для магазина?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В целом правильно, но если уж затеваться с хранением адресов, то тогда в заказе должна быть ссылка на id адреса. иначе просто нет смысла. В целом для такой примитивной схемы отдельное хранение адресов выглядит неадекватным, я бы просто писал адрес в заказ.
    То же самое про телефоны. Просто писать в таблицу юзеров.
    Не хватает емейла. Смс на каждый чих рассылать дорого.

    В таблице заказов очень сильно не хватает поля status. Ну и связанной таблицы с историей статусов.
    Отдельно хранить дату и время - это глупость. Есть тип datetime
    discount - это ОЧЕНЬ отдельная тема. Но по крайней мере скидка должна размазываться по товарам. Если клиент при выкупе откажется от одного, то как пересчитывать цену?
    В целом стоит в заказе дублировать основную инфу по товарам. Потому что её надо показывать в истории заказов, а товара может уже не быть в базе. В том числе цену до скидки и со скидкой.

    Непонятно, что за таблица store.
    Ответ написан
  • Как удалить строки в CSV?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    создаём пустой временный файл
    читаем большой csv файл построчно:
        проверяем нужное условие: 
            если оно выполняется, то пишем строку в новый файл
    закрываем временный файл
    переименовываем временный файл в исходный
    Ответ написан
    8 комментариев
  • Чем ошибки отличаться от исключений?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Насколько я понимаю, ошибками в питоне считаются фатальные ошибки, исключениями - все остальные.
    Плюс исключения можно бросать самому.
    Ответ написан
  • Почему не срабатывает php файл?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ответ написан
    Комментировать
  • Как отсортировать CSV файл по дате?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если без изысков
    with open(filename) as file:
        csv = file.read().splitlines()
    sorted(csv)
    for line in csv:
        item = line.split(',')
        if  line[0] > '2010-06-08' 
            print(line)
    Ответ написан
    Комментировать
  • Нужно ли использовать interface?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Нет, ничего указывать не надо.
    Тут и без интерфейсов получатся отличные самолёты из соломы и палок.
    Ответ написан