Ответы пользователя по тегу SQL
  • Как получить данные с БД за Н количество дней?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Используй BETWEEN
    SELECT 
        *
    FROM 
        Orders
    WHERE 
        OrderDate BETWEEN '1996-07-01' AND '1996-07-31';
    Ответ написан
    Комментировать
  • Возможно ли создать отчёт Excel с помощью SQL?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Дело в том, что мне эту функцию надо реализовать на сайте. То есть, чтобы пользователь мог выбрать период и получить необходимый отчёт.

    Так возьми PHP, библиотеку phpexcel. Там же можешь записать формулу.
    Ответ написан
    Комментировать
  • Запись нового или перезаписать если есть?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Для кода есть специальный тэг, не надо его пихать в цитату.
    Тут все подробно расписано.
    https://www.mysqltutorial.org/mysql-insert-or-upda...
    Ответ написан
    Комментировать
  • Как правильно заджоинтить таблицы SQL?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    SELECT
        n.`Name`,
        n.`Address`,
        CASE 
            WHEN p.`Zarp` IS NULL THEN 0
            ELSE p.`Zarp`
        END as `Zarp`
    FROM `NAME` n
    LEFT JOIN `PRIC` p ON n.`Name` = p.`Name`


    P.S.: Не самое лучшее решение связывать по varchar. Связь будет многие ко многим, и посыпятся дубли. Поставь идентификатор к первой таблице первичным ключом, а во втором вторичным и по ним JOIN, связь будет один к одному.
    Ответ написан
  • Как составить запрос с join с условием выборки для второй таблицы?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Примерно так

    SELECT
        t1.id AS id,
        t1.number as number,
        t2.first_name as name,
        t2.last_name as surname
    FROM
        table1 t1
        JOIN table2 t2 ON t1.country = t2.country
    WHERE
        t1.country = 'Mexico'

    Слово number надо будет заключить в кавычки. `number` для MySQL или "number" для PostgreSQL

    UPD. Лучше пересмотреть структуру. Если в первой таблице, в поле country будут повторения, то в конечно результате будут дублирования. Может во второй таблице поле country сделать вторичным ключом (ссылка на id первой таблицы).
    Ответ написан
    2 комментария
  • Как выбрать одну строку с более поздней датой?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    SELECT
    /* твой код*/
    ORDER BY create_date DESC 
    LIMIT 1
    Ответ написан
    Комментировать
  • Как вывести данные из базы в формате JSON (с помощью php)?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Держи
    <?php
        /* создаем соедиенение с бд*/
        $link = mysqli_connect("localhost", "root", "", "test");
    
        /* для примера возьмем такой doctorid*/
        $doctorid = 2; 
    
        /* создаем подготавливаемый запрос */
        $stmt = mysqli_stmt_init($link);
        $sql = '
            SELECT
                cal.`doctorid`,
                doc.`doctor-name`,
                cal.`clinicid`,
                clin.`clinic-name`,
                cal.`start`,
                cal.`end`
            FROM
                `bio_vet_calendar` cal 
                JOIN `bio_vet_clinic_department` clin ON cal.`clinicid` = clin.`clinicid`
                JOIN `bio_vet_doctor` doc ON cal.`doctorid` = doc.`doctorid`
            WHERE
                cal.`doctorid` = ?
        ';
        if (mysqli_stmt_prepare($stmt, $sql)) {
            /* привязываем переменные к параметрам */
            mysqli_stmt_bind_param($stmt, "i", $doctorid);
            /* выполняем запрос */
            mysqli_stmt_execute($stmt);
            /* выбираем данные из результата */
            $response = mysqli_stmt_get_result($stmt);
            /* преобразовываем в ассоциативный массив*/
            $result = mysqli_fetch_all($response, MYSQLI_ASSOC);
            /* закрываем запрос */
            mysqli_stmt_close($stmt);
        }
        
        /* закрываем соединение с бд*/
        mysqli_close($link);
        
        /* выводим JSON */
        echo json_encode($result);

    Только соединение с БД поправь на своё.
    Ответ написан
    6 комментариев
  • Алиасы строки в sql?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Как то так
    SELECT 
    	COUNT(ooo.year_alb)
    FROM
    	(
    	SELECT
    		alb.year AS	year_alb,
    		cal.year AS year_cal
    	FROM
    		calendar_year cal
    		LEFT JOIN album alb ON alb.year = cal.year AND (alb.band_id = 388)
    	WHERE 
    		cal.year BETWEEN 1969 AND 1982
    	) ooo


    year - название столбца лучше взять в кавычки, `year` - так для MySQL, или так "year" для PostgreSQL
    Ответ написан
  • Как построить обратный рекурсивный запрос в MySQL?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Как ни странно, первая ссылка в гугле
    Ответ написан
    1 комментарий
  • Как вытащить из таблицы значение столбца определенной строки?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    SELECT
        hp
    FROM
        players
    WHERE
        id = 12345
    Ответ написан
    Комментировать
  • Как выбрать два свежих значения?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
  • В чем ошибка в sql запросе?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    purchase.id
    Ответ написан
    Комментировать
  • Как правильно написать SELECT с MAX()?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Создал таблицу
    5ca72a08c0a5a488761438.jpeg
    Написал запрос
    SELECT * FROM `test` WHERE nom_uch = 100 AND nom_kvit = (SELECT max(nom_kvit) FROM `test` WHERE nom_uch=100)

    Результат
    5ca72c745fc0f736820981.jpeg
    Ответ написан
    2 комментария
  • Что не так с запросом?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Создал таблицы categories, main и заполнил их
    -- -- -- спойлер: SQL на создание и заполнение -- -- --
    -- phpMyAdmin SQL Dump
    -- version 4.8.3
    -- https://www.phpmyadmin.net/
    --
    -- Хост: 127.0.0.1:3306
    -- Время создания: Мар 11 2019 г., 14:41
    -- Версия сервера: 5.5.61-MariaDB
    -- Версия PHP: 5.6.38
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
    
    --
    -- База данных: `test`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Структура таблицы `categories`
    --
    
    CREATE TABLE `categories` (
      `id` int(11) NOT NULL,
      `name` varchar(255) NOT NULL,
      `en` varchar(255) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    -- Дамп данных таблицы `categories`
    --
    
    INSERT INTO `categories` (`id`, `name`, `en`) VALUES
    (1, 'большой', 'big'),
    (2, 'красный', 'red'),
    (3, 'ровный', 'smooth');
    
    -- --------------------------------------------------------
    
    --
    -- Структура таблицы `main`
    --
    
    CREATE TABLE `main` (
      `id` int(11) NOT NULL,
      `simple` varchar(255) NOT NULL,
      `genre` varchar(255) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    --
    -- Дамп данных таблицы `main`
    --
    
    INSERT INTO `main` (`id`, `simple`, `genre`) VALUES
    (1, 'Какой-то', 'red'),
    (2, 'текст', 'red'),
    (3, 'для', 'red'),
    (4, 'проверки', 'red'),
    (5, 'запроса', 'red'),
    (6, 'типа red', 'red'),
    (7, 'my dick', 'big'),
    (8, 'is big', 'big'),
    (9, 'my dick', 'big'),
    (10, 'is very big', 'big'),
    (11, 'Little', 'big'),
    (12, 'Big', 'big'),
    (13, 'Group', 'big'),
    (14, 'Track', 'big'),
    (15, 'Big Dick', 'big'),
    (16, 'Вообще', 'smooth'),
    (17, 'Вообще', 'smooth'),
    (18, 'не', 'smooth'),
    (19, 'имею', 'smooth'),
    (20, 'малейшего', 'smooth'),
    (21, 'понятия', 'smooth'),
    (22, 'что', 'smooth'),
    (23, 'тут', 'smooth'),
    (24, 'написать', 'smooth'),
    (25, 'для', 'smooth'),
    (26, 'теста', 'smooth'),
    (27, 'но', 'smooth'),
    (28, 'и', 'smooth'),
    (29, 'так', 'smooth'),
    (30, 'сойдет', 'smooth');
    
    --
    -- Индексы сохранённых таблиц
    --
    
    --
    -- Индексы таблицы `categories`
    --
    ALTER TABLE `categories`
      ADD PRIMARY KEY (`id`);
    
    --
    -- Индексы таблицы `main`
    --
    ALTER TABLE `main`
      ADD PRIMARY KEY (`id`);
    
    --
    -- AUTO_INCREMENT для сохранённых таблиц
    --
    
    --
    -- AUTO_INCREMENT для таблицы `categories`
    --
    ALTER TABLE `categories`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
    
    --
    -- AUTO_INCREMENT для таблицы `main`
    --
    ALTER TABLE `main`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=31;
    COMMIT;
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


    И вот таким образом вытащил нужные мне данные.
    SELECT
    	m.id as main_id,
    	m.simple as main_simple,
    	m.genre as main_genre,
    	c.id as categories_id,
    	c.name as categories_name,
    	c.en as categories_en
    FROM 
    	main m
    	LEFT JOIN categories c on m.genre = c.en
    WHERE 
    	c.en LIKE '%big%'

    -- -- -- спойлер: Несколько скриншотов -- -- --

    LIKE '%big%'
    5c864bb6015a1003216827.png

    LIKE '%red%'
    5c864bbf05f17153534338.png

    LIKE '%smooth%'
    5c864bcc13fc3849509456.png


    Этот метод работает как и на MySQL, так и на PostgreSQL, если кому интересно.
    Ответ написан
    Комментировать