Ответы пользователя по тегу SQL
  • Как исправить "Input string was not in a correct format."?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    1) Стоит добавить тег C#, проблема явно не в бд, а в формировании запроса.
    2) Неплохо бы проверить что возвращает string.Format("%{}%", txtSearch.Text), думаю лажа именно там.
    Ответ написан
    2 комментария
  • Как избавляться от ненужных записей в бд?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    В дальнейшем это повысит нагрузку на бд при поиске записей.
    Когда записей будет под миллион, запустите 1 раз удаление старых неактивированных аккаунтов и выиграете еще аж 500 (а может даже 5тыщь!) записей, это сильно поможет...
    Ответ написан
    Комментировать
  • Можно ли делать запрос к промежуточной таблице многие-ко-многим для извлечения конкретной информации?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Можем ли мы сделать запрос к БД и извлечь из промежуточной таблицы (book_author) информацию по конкретной книге?
    Из "промежуточной" можно извлечь только связи, она для этого и нужна.

    Т.е. у нас для работы есть только информация о книге и теперь нужно извлечь информацию о её авторе (авторах).
    В чем вопрос? Как сделать джоин с 3 таблицами? Так же как с двумя, только с тремя.

    Приемлемо ли вообще делать такие запросы к промежуточным таблицам?
    Какие - "такие"? У вас вообще ни одного запроса не написано.
    Ответ написан
    7 комментариев
  • Как вернуть NULL если ничего не найдено в SQL?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    А есть какая-то адекватная причина, по которой вам требуется получать такой странный результат?
    Ответ написан
    Комментировать
  • Увеличение записи на некоторое число по предыдущей записи?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Похоже что задача сводится к удалению всех айди и заполнения автоинкрементом с шагом 10.
    SET GLOBAL auto_increment_increment=10;
    SET GLOBAL auto_increment_offset=1;
    ALTER TABLE example DROP COLUMN id;
    ALTER TABLE example ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (id);
    Вообще задача странная, и попахивает очередным "гениальным" решением...
    Ответ написан
    1 комментарий
  • Что я неправильно сделал в связях таблиц?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Вангую что в запросе что-то типа селект * , соответственно айди тупо переписывается. Создайте алиас для нужного поля, типа comments.id as comment_id, users.id as user_id

    Если используется построитель запросов, укажите какие поля нужны и выставите алиасы через встроенные методы.
    Ответ написан
    6 комментариев
  • Как загрузить в моём случае несколько фото в базу данных?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Мой инпут содержит всего 1 название фото, из-за в базу данных и отправляется 1 фото
    Для загрузки большого количества файлов из одного инпута используется тег multiple.
    Для того чтобы понимать что приходит в пхп делайте print_r($_FILES); и смотрите что там пришло.
    Естественно для обработки более 1 файла нужен будет цикл, перебирающий $_FILES.
    Ответ написан
    Комментировать
  • Как правильно сформировать такой запрос?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Проще всего рут комментарию давать парент_ид равный своему ид, тогда все становится элементарным - ордер по парент_ид, креатед_эт. При выводе просто проверять если парент = ид. А все коментарии которые ответы на ответы все равно писать как ответ на рут коментарий, так как они будут тупо по дате строиться, и разницы в принципе нет. Разве что вы хотите чтобы ветвление было бесконечным, тогда проще ввести рут_ид.
    Ответ написан
    Комментировать
  • Как составить запрос sql?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Такое делается на уровне приложения. БД это отдельный слой - хранения, вполне нормально получить пустое значение при отсутствии значения в хранилище, он (слой) не должен оперировать логикой замены или подстановки. Логика подстановки может поменяться, и при этом у вас не должно быть изменений нигде, кроме как в конкретной точке логики приложения. Хранилище с этим никак не связано.
    Ответ написан
    Комментировать
  • Как сгрупировать запрос в Laravel?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Что-то типа:
    $a = Model::orderBy("id", 'desc')->limit(3);
    $b = Model::latest()->union($a)->get();
    Ответ написан
    Комментировать
  • Как в базе данных хранить информацию о нескольких периодах?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Имеется телеграмм бот, который должен отсылать отчеты о состоянии оборудования по периодам (Сейчас, Прошлая неделя, эта неделя и т.д)
    Если репорт - отдельная запись, то достаточно даты создания репорта. Никакой отдельной таблицы не нужно, так как это во первых будет нарушать 3 нормальную форму и соответственно вносит денормализацию в бд, и во вторых избавляет от множества лишних телодвижений по созданию странных таблиц. Селект с битвин или "дата < N энд дата > M" будет достаточно.
    Ответ написан
  • Почему не работает $_SESSION?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Файл подключения:
    Зачем? Тут нет никакой логики связанной с логином.

    Что у вас в сессии смотрели?
    var_dump($_SESSION);
    if (isset($_SESSION['logged_user']))...
    Ответ написан
  • Как получить значение по id в связанных таблицах в бд?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Как реализовать такое код?
    да, код
    нужны ли для это joins?
    Да, нужны

    id: 1, name: 'a', author: 1
    желательно соблюдать рекомендации по именованию полей и таблиц:
    1) так как поле author очевидно является связью по id с таблицей author, ее название должно быть author_id,
    2) таблица с авторами должна называться во множественном числе - authors.
    Ответ написан
  • Как сделать категории в интернет магазине?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    очевидным решением в лоб выглядит добавление поля root_id, что поможет быстро вытащить нужную ветку. А дальше уже логикой приложения ограничить вывод...

    Где-то тут давно пробегало решение с рекурсивным запросом, но сейчас уже не вспомню как там было, но оно и так вроде гуглится. С другой стороны не уверен что запрос будет эффективнее пересчета на бэкенде...
    Ответ написан
  • Надо ли что-то еще делать для избежания SQL инъекций?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    (не знаю как называется)
    Называется подготовленные выражения/prepared statements, почитать можно тут.
    Ответ написан
    Комментировать
  • Как эффективно настроить связь между записями в бд?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Первое - разнести папки и файлы в разные таблицы.

    в бд записи папки хранится массив id-шников на файлы
    Это не нужно (нарушает 3 нормальную форму), достаточно этого
    в самих файлах поле parentId указывает на папку, в которой он хранится


    и путь до файла
    Зачем? У вас есть папка и файлы, зачем дважды дублировать эту информацию? И опять же, нарушает 3 нормальную форму.

    Файлы хранить без пути, просто названия и parentId (хотя правильнее называть поле по сущности, например folder_id, и нотация через андерскор), соответственно папки просто id, user_id, name.
    Ответ написан
  • Какие могут быть вероятные причины, когда база данных не выдает ошибок и перестала выводить посты?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    0) Проверить лог ошибок или добавить в код выше
    ini_set('error_reporting',E_ALL);
    ini_set('display_errors', 1);
    и убедиться что ошибок выполнения нет. Естественно, подключение должно быть настроено на вывод ошибок. Так же убрать бессмысленный биндинг $stmt->execute(['id'=>id]);, где внутри даже не переменная, а какая-то фигня...
    1) Проверить запрос в консоли или в phpmyadmin
    2) В случае если запрос ничего не выдает - удалить строки INNER JOIN category ON category.id=post.cat_id, выполнить запрос
    3) Если выдает что-либо, значит таблица с категориями пострадала, проверить выведенные посты на номер категории, и посмотреть что стало с этими записями в таблице category.
    4) Если не выводит - повторить пункт 3 со строкой INNER JOIN users ON post.user_id = users.id, со всеми вытекающими.
    Ответ написан
    6 комментариев
  • Как правильно организовать таблицы?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Я так понимаю, клиентов у вас в год копится больше чем позволяет проиндексировать int?
    Тогда во первых поздравляю со столь успешным бизнесом.
    Во второых - чем обусловлено такое гениальное решение (ну, кроме незнания о существовании bigint)?
    Ну и в третьих - при таких оборотах можно было бы позволить себе нанять нормального программиста, или даже архитекта...
    Ответ написан
  • Почему я не могу отобразить и записать emoji?

    ThunderCat
    @ThunderCat Куратор тега HTML
    {PHP, MySql, HTML, JS, CSS} developer
    Установить кодировку соединения в utf-8mb4
    Так же, поле в которое пишете значения перевести коллэйшн в utf-8mb4
    Ответ написан
    1 комментарий
  • Как сделать SQL запрос из двух таблиц?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Пока на ум приходит получить все категории, потом в цикле пройтись по ним и...

    Естественно это не делается так. Такие задачи решаются на стороне бд через джоин таблиц. Не считая ошибки синтаксиса и отсутствия лимита, запрос в ответе Vindicar подойдет. Схема хранения не самая лучшая, так как по сути у вас получается один-ко-многим (одна категория ко многим постам), и если категорий на 1 пост будет больше 1, вся структура идет в мусор. Более качественным решением все же будет многие-ко-многим между постами и категориями.
    Ответ написан
    1 комментарий