Ответы пользователя по тегу SQL
  • Как подставить вместо foreign key значение?

    @cicatrix
    было бы большой ошибкой думать
    SQL JOIN - соединение таблиц базы данных
    https://function-x.ru/sql_join.html
    Ответ написан
    Комментировать
  • Как сделать запрос в БД чтобы получилось так как на скрине?

    @cicatrix
    было бы большой ошибкой думать
    Сделай вычисляемый столбец (price_range), где будет цена, округлённая до десятков, скажем (впрочем, шаг можно подобрать индивидуально). На него индекс.
    Дальше select price_range, count(id) from options group by price_range
    Ну а дальше отрисовывай график.
    Ответ написан
    Комментировать
  • Как создать свою базу данных и выводить с нее данные на сайт?

    @cicatrix
    было бы большой ошибкой думать
    Можно уточнить, что вы понимаете под "своей базой данных"?
    Это устроено так: есть т. н. "движок", это программное обеспечение, которое предоставляет тебе API для ввода и вывода данных. Таких движков много - это MySQL, PostgresSql, MS-Sql, MongoDb, SqLite, и пр.
    У всех свои плюсы и минусы, выбирать нужно исходя из конфигурации твоей разработки и твоих потребностей.
    Такой сервер (ПО) должен быть запущен и крутиться на машине, к которой можно "достучаться" из твоего приложения.
    Альтернативой использованию БД может служить файловое хранение данных (где данные просто хранятся в файле на диске рядом с твоим приложением).
    Что именно выбрать - исходя из твоего вопроса сказать сложно. Какой предполагается хранить объём данных? Какая наиболее частая операция (выборка по условиям, запись, агрегация)? Сколько запросов в секунду (час) нужно обрабатывать, и пр.
    Если у тебя лабораторная работа в ВУЗе и надо сохранить 50 значений, то можешь вообще не париться и хранить данные в файле.
    Ответ написан
  • Как такое может быть. Разный результат при "меньше либо равно" и "BETWEEN" для одной даты?

    @cicatrix
    было бы большой ошибкой думать
    Вот ссылка:
    https://www.techonthenet.com/mysql/between.php
    Где написано
    When using the MySQL BETWEEN Condition with dates, be sure to use the CAST function to explicitly convert the values to dates.

    Точно не могу сказать, в чём разница между
    STR_TO_DATE('2021-04-14 23:59:59', '%Y-%m-%d %H:%i:%s')
    и
    CAST('2014-02-01' AS DATE)
    но, возможно, она есть.

    Кроме того, возможно, играет роль не даты, а времени.
    2021-04-14 < 2021-04-14 11:46:23
    Ответ написан
  • Как реализовать страницу для тестирования учеников?

    @cicatrix
    было бы большой ошибкой думать
    Уж больно богатая тема для фантазий.
    А что именно вызывает затруднения? Вроде бы проектирование вполне прямолинейное -
    таблица вопросов, таблица ответов, таблица вариантов теста. Назначение варианта студенту, из ЛК запрос на тест с вопросами, обратный запрос пересылает ответы. На стороне сервера сверяется правильно/неправильно.
    Ответ написан
    1 комментарий
  • Как лучше делать запросы в БД разом или несколько раз для получения данных?

    @cicatrix
    было бы большой ошибкой думать
    Вброшу свои мысли. 10К пользователей, разбитые на странички по 15 будут представлять собой 6667 страниц.
    Да, разумеется, можно сделать подобную разбивку, так как здесь уже писали, но это равно сделать "на от.бись!"
    Совершенно очевидно, что ни один человек в здравом уме и трезвой памяти не будет листать 6К страниц.
    Естественно, усвоив это, необходимо вернуться в начало и понять, каких именно пользователей и по каким критериям будет в этом интерфейсе искать оператор. Видимо, ему не нужны все пользователи без исключения, ему нужны какие-то особенные, отличающиеся по какому-либо признаку. Соответственно и интерфейс предоставлять такой, чтобы облегчить этот поиск.
    Ответ написан
    Комментировать
  • Достаточно ли подготовленных запросов и и проверки на спец. символы для защиты?

    @cicatrix
    было бы большой ошибкой думать
    Для защиты от SQL-инъекций необходимо удостовериться, что данные с клиента (именно данные, а не пользовательский ввод, ибо ничего не мешает выполнить веб-запрос нештатными методами) никогда не передаётся на сервер напрямую, а всегда экранируется. Значения никогда не передаются в запрос напрямую, а только через параметры.
    Ответ написан
  • Как сделать избирательную проверку на not null в таблице (check constraint)?

    @cicatrix Автор вопроса
    было бы большой ошибкой думать
    Вот как-то так, по всей видимости:
    ...
    constraint CHK_nulls check 
    (A is null and B is null and C is not null) or
    (A is not null and B is not null and C is null)
    Ответ написан
    Комментировать
  • Какие символы не используются в sql?

    @cicatrix
    было бы большой ошибкой думать
    Экранировать надо одинарные и двойные кавычки. Кажется всё.
    Подводный камень здесь другой - зависит конечно от конкретики вашего решения, но у меня сильное предчувствие уязвимости по SQL инъекциям. Вы эти SQL запросы откуда и куда слать собираетесь? Надеюсь не от клиента на сервер?
    Ответ написан
  • Как вывести максимально число спутников у планеты?

    @cicatrix
    было бы большой ошибкой думать
    Как-то так:
    select max(moonCount) from (
        select 
            p.idPlanet, 
            count(m.idSputnik) moonCount
        from Planet p
        join Sputnik m on m.Planet_idPlanet = p.idPlanet
        group by p.idPlanet);
    Ответ написан
    Комментировать
  • Чем отличается constraint от foreign key?

    @cicatrix
    было бы большой ошибкой думать
    Вы путаете сладкое с мягким.
    Constraint ограничение - когда вы задаёте параметры таблицы при помощи create/alter table
    вы говорите, что для такого-то поля задаётся constraint (ограничение).
    Ограничениями может быть primary key, foreign key, unique, default, check и т. д. - это всё ограничения.
    Вот таблица:
    CREATE TABLE MYTABLE  (
       ID BIGINT NOT NULL CONSTRAINT PK_MYTABLE PRIMARY KEY,
       CLIENT BIGINT NOT NULL CONSTRAINT FK_MYTABLE_CLIENT FOREIGN KEY REFERENCES CLIENTS(ID),
       EMAIL NVARCHAR(100) NOT NULL CONSTRAINT UQ_MYTABLE_EMAIL UNIQUE,
       ACTIVE BIT NOT NULL CONSTRAINT DF_MYTABLE_ACTIVE DEFAULT (1)
    )

    Что переводится как:
    Создать таблицу MYTABLE (с полями):
    ID целое 64 бит, не допускать пустых, ограничение с названием PK_MYTABLE вида "Первичный ключ",
    CLIENT целое 64 бит, не допускать пустых, ограничение с названием FK_MYTABLE_CLIENT вида "Внешний ключ", который ссылается на таблицу CLIENTS, поле ID,
    EMAIL строковое длиной 100, не допускать пустых, ограничение с названием UQ_MYTABLE_EMAIL вида "Должно быть уникальным",
    ACTIVE бит, не допускать пустых, органичение с названием DF_MYTABLE_ACTIVE вида "Значение по умолчанию" равное 1

    Есть и альтернативный синтаксис, где ключевое слово constraint не используется.
    В основном его применяют, когда надо явно задать имя на ограничение.
    Ответ написан
    Комментировать
  • Как получить из базы данных ВСЕ значения столбца "А" WHERE "В" = "far"?

    @cicatrix
    было бы большой ошибкой думать
    А вы смотрели? Ваш запрос делает ровно то, что описано в заголовке. Если запрос выдаёт только одну строку, значит, в таблице только одна строка и есть с удовлетворяющим условием ( B = far)
    Ответ написан
  • Как проверить наличие таблицы в БД?

    @cicatrix
    было бы большой ошибкой думать
    Простите, не удержался :)
    if(mysql_query("DROP TABLE `таблица`")){echo "Таблица существовала...";}
    Ответ написан
    Комментировать
  • Почему не работает GROUP BY?

    @cicatrix
    было бы большой ошибкой думать
    GROUP BY используется с агегирующими функциями (COUNT, MIN, MAX, SUM и т. д.), у вас нечего агрегировать, у вас простая выборка.
    В вашем случае надо пользовать SELECT DISTINCT имя_поля_где_надо_убрать_дубли FROM таблица

    Вместо * надо указать через запятую список полей
    Ответ написан
    Комментировать
  • Как проверить на наличие разрывов нумерации в БД (SQL)?

    @cicatrix Автор вопроса
    было бы большой ошибкой думать
    По второму вопросу, кому интересно, допёр вот до этого:
    SELECT number, DENSE_RANK()  OVER(ORDER BY DIFF ASC) range_id
    FROM
    	(
    		SELECT [number], [number] - DENSE_RANK()  OVER(ORDER BY [number] ASC) DIFF
    		FROM [TestSet]
    	) t
    ORDER BY [number]
    Ответ написан
    Комментировать
  • Как спроектировать БД с переменным количеством параметров?

    @cicatrix
    было бы большой ошибкой думать
    На одних RDBMS свет клином не сошёлся. Посмотрите в сторону nosql, мне кажется, вам это больше подойдёт.
    Ответ написан
    Комментировать