powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помощь новичку (предупреждения при выплднении MySQL запроса)
13 сообщений из 13, страница 1 из 1
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610298
rick1177
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые, надеюсь, друзья)
Первый раз на Вашем Форуме и мой первый вопрос (я только начал изучат MySQL и, скорее всего, делаю глупости, но разобраться самостоятельно не могу(( ).

Итак, написал я такой запрос:
мой второй в жизни запросавтор/*УДАЛЯЕМ СТАРУЮ БАЗУ, ЕСЛИ ОНА БЫЛА*/
DROP DATABASE IF EXISTS `my_second_database`;
/*СОЗДАЁМ БАЗУ, ПРОВЕРЯЯ НЕТ ЛИ ТАКОГО НАЗВАНИЯ*/
CREATE DATABASE IF NOT EXISTS `my_second_database` /*!40100 COLLATE 'cp1251_general_ci' */;
/*ОПРЕДЕЛЯЕМ КАКУЮ БАЗУ ИСПОЛЬЗОВАТЬ*/
USE `my_second_database`;

DROP TABLE IF EXISTS `contracts`;
CREATE TABLE IF NOT EXISTS `contracts` (
`ID` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
`NumberOfTheContract` varchar(10) NOT NULL ,
`AccountID` int NOT NULL DEFAULT '4',
`ListOfUsers` varchar(200) NOT NULL );

DROP TABLE IF EXISTS `accounts`;
CREATE TABLE IF NOT EXISTS `accounts` (
`ID` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
`AccountNumber` int NOT NULL ,
`AccountBalance` decimal(13, 2) NOT NULL DEFAULT '0',
`AccountStatus` int(1) NOT NULL DEFAULT '1');

DROP TABLE IF EXISTS `users`;
CREATE TABLE IF NOT EXISTS `users` (
`ID` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
`UserFullName` varchar(200) NOT NULL ,
`UserAddress` varchar(1000) NULL ,
`EquipmentId` int NULL );

DROP TABLE IF EXISTS `equipment`;
CREATE TABLE IF NOT EXISTS `equipment` (
`ID` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
`EquipmentNumber` varchar(200) NOT NULL );

START TRANSACTION /*ЗАМОРАЖИВАЕМ БАЗУ ДЛЯ ДОБАВЛЕНИЯ ДАННЫХ*/;

INSERT INTO `contracts` (`NumberOfTheContract`, `AccountID`, `ListOfUsers`)
VALUES ('СД-153\2015','4','1, 3, 5, 6, 7, 9'),
('СД-226\2015','2','3, 5, 6'),
('СД-67\2018','2','5, 8, 9'),
('СД-267\2017','1','1, 2, 5, 7, 8'),
('СД-202\2016','2','1, 3, 4, 7'),
('СД-60\2015','3','1, 3, 4, 8'),
('СД-265\2015','1','2, 3, 5, 7, 8, 9'),
('СД-60\2016','5','3, 4, 6, 7');



INSERT INTO `accounts` (`AccountNumber`, `AccountBalance`, `AccountStatus`)
VALUES ('6',21.73,'1'),
('14',44.67,1),
('40',58.73,1),
('56',56.54,0),
('39',70.76,0),
('44',33.95,1),
('47',80.66,0),
('88',36.64,1);

INSERT INTO `users` (`UserFullName`, `UserAddress`, `EquipmentId`)
VALUES ('Шинский Прокофий Артемиевич ','614000, Пермь, улица Решетникова, дом 4, оф. 306',null),
('Олейников Виктор Титович ','614000, Пермь, улица КИМ, 75, офис 201',7),
('Порошина Ираида Игнатиевна ','614000, Пермь, улица Чехова, дом 26',2),
('Сайтахметова Нона Тихоновна ','614000, Пермь, улица Чкалова, дом 7, корпус 3',null),
('Воеводина Альбина Несторовна ','614000, Пермь, улица Мира, 64',5),
('Трактирников Платон Фролович ','614000, Пермь, улица Крылова, 4',8),
('Эмин Евстигней Кириллович ','614000, Пермь, улица Максима Горького, 83, оф. 404',7),
('Алистратова Эмма Геннадиевна ','614000, Пермь, улица Полины Осипенко, 51 а, Медцентр ""Диамед""',null),
('Косыгин Елизар Сократович','614000, Пермь, улица Полины Осипенко, 51 а, Медцентр ""Диамед""',1);

INSERT INTO `equipment` (`EquipmentNumber`)
VALUES ('GQEF-5586'),
('DHDX-8353'),
('BOYJ-0715'),
('KMOM-2153'),
('DJMK-9599'),
('XBVM-9817'),
('FUFO-2526'),
('BQOY-2640');


COMMIT; /*РАЗМОРАЖИВАЕМ БАЗУ ПОСЛЕ ДОБАВЛЕНИЯ ДАННЫХ*/;

DROP TABLE IF EXISTS `contracts_new`;
CREATE TABLE IF NOT EXISTS `contracts_new` (
`ID` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
`NumberOfTheContract` varchar(10) NOT NULL ,
`AccountID` int NOT NULL DEFAULT '4',
`User` VARCHAR(12) NOT NULL );



DROP FUNCTION IF EXISTS `SPLIT_STRING`;
/*ФУНКЦИЯ ДЕЛЕНИЯ СТРОКИ ПО ОПРЕДЕЛЕННОМУ СИМВОЛУ*/
CREATE FUNCTION `SPLIT_STRING`
( str VARCHAR(2000),
delim VARCHAR(12),
pos INT )
RETURNS varchar(255) CHARSET utf8
COMMENT 'Разделение строки по делимитеру'
RETURN
REPLACE(
SUBSTRING(
SUBSTRING_INDEX(str, delim, pos),
CHAR_LENGTH(
SUBSTRING_INDEX(str, delim, pos - 1)
) + 1
),
delim,
''
);


DROP PROCEDURE IF EXISTS `BadTableToGoodTable`;
DROP PROCEDURE IF EXISTS BadTableToGoodTable;

delimiter //
CREATE PROCEDURE `BadTableToGoodTable`()
BEGIN

DECLARE i_FIRST INTeger;
DECLARE i_USERS INTeger;
DECLARE j_FIRST INTeger;
DECLARE j_ROWS INTeger;

SET j_FIRST=LEAST (1,(SELECT MIN(`ID`) AS Min_j_FIRST FROM `Contracts`));
SET j_ROWS = GREATEST ((SELECT COUNT(*) FROM `Contracts`), (SELECT MAX(`ID`) AS Max_j_FIRST FROM `Contracts`));

REPEAT
SET i_FIRST = 1;
SET i_USERS=(Select LENGTH(`ListOfUsers`) FROM `Contracts` WHERE `ID`=j_FIRST);
SET i_USERS=(i_USERS-1)/3+1;
REPEAT
INSERT INTO `contracts_new` (`NumberOfTheContract`, `AccountID`, `User`)
SELECT `NumberOfTheContract`,`AccountID`, `SPLIT_STRING`(`ListOfUsers`, ', ', i_FIRST ) FROM `Contracts`
WHERE (`SPLIT_STRING`(`ListOfUsers`, ', ', i_FIRST ) IS NOT NULL) and (`ID`=j_FIRST);

SET i_FIRST = i_FIRST + 1;
UNTIL i_FIRST=i_USERS+1
END REPEAT;
SET j_FIRST = j_FIRST + 1;
UNTIL j_FIRST=j_ROWS+1
END REPEAT;
END//
delimiter ;

CALL BadTableToGoodTable();

SELECT contr.NumberOfTheContract, usr.UserFullName, acc.AccountNumber, acc.AccountBalance, acc.AccountStatus
FROM `contracts_new` AS contr, `users` AS usr, `accounts` AS acc
WHERE (contr.User=usr.ID AND contr.AccountID=acc.ID);

SELECT contr.NumberOfTheContract, usr.UserFullName, eq.EquipmentNumber, acc.AccountStatus
FROM `contracts_new` AS contr, `users` AS usr, `equipment` AS eq, `accounts` AS acc
WHERE (contr.User=usr.ID AND contr.AccountID=acc.ID and usr.EquipmentId =eq.ID and usr.EquipmentId IS NOT NULL);


К слову... выполнял всё в соответствии с заданием одного товарища:
Задание, по которому всё выполнялосьДомашка №2 (психоделический трип)
{
1. создать три таблицы c полями:
таблица1(договор): айди, номер договора, айди счета, список айди пользователей;
таблица2(счет): айди, номер счета, баланс счета, статус счета;
таблица3(пользователи): фио, адрес;
добавить пользователей, счета, договора,
связать договор с тремя пользователями и одним счетом

2. вывести запросом такую табличку:
-номер договора
-фио пользователя
-номер счета
-баланс счета
-статус счета

3. создать табличку4(оборудование): айди, номер
формат номера: A..Z[4]-1..9[4], пример: AAAA-1234
добавить в табличку пользователей "айди оборудования"
заполнить таблицу оборудования строками;
добавить некоторым пользователям ссылку на одно оборудование;

4. вывести запросом
-номер договора
-фио пользователя
-номер оборудования пользователя
-статус счета
}


Писал я всё с использованием двух приложений:

HeidiSQL
Версия 9.5.0.5259 (64 Bit)
Дата сборки: 2018-03-04 11:22:04

Navicat Premium
Version 11.2.14 (64-bit)-

Версия MySQL
5.7.21-log

В общем-то, вроде, всё понятно, после разбора (функцию украл, процедуру переписал, остальное - сам). Однако, система (в HeidiSQL) пишет какие-то предупреждения. И не знаю, где их посмотреть, на что оно ругается, а самое главное - что не так?

А Navicat вообще отказался экспортировать запрос.

НО! Он выполняется!

Помогите, пожалуйста, разобраться, что я делаю не так?
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610310
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rick1177что я делаю не так?1) Используете нештатные клиенты (HeidiSQL, Navicat Premium);
2) Используете чужой код, не понимая до конца его сути ("функцию украл");
3) Не читаете сообщений сервера ("пишет какие-то предупреждения").
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610311
rick1177
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, есть конкретные предложения?
1) Что предлагаете использовать?
2) Не согласен - функции разобрал - всё понял.
3) Не могу сообразить, где их прочитать в этих программах...
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610315
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) При изучении - только штатную консоль. Всё остальное может быть только вспомогательным инструментом.
2) Ну так уж было сформулировано...
3) См. п. 1.
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610324
rick1177
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, я надеюсь такой софт пойдёт?
MySQL Workbench 6.3
Verson 6.3.10 build 12092614 CE (64 bits) Community


Штатная штука, установилась вместе с MySQL.

Или Вы предлагаете как-то иначе писать запросы?

В результате выполнения кода в этом софте были отмечены следующие проблемы (прилагаю файл).

Все проблемы всегда возникаю с командами:
DROP TABLE IF EXISTS
CREATE TABLE  IF NOT EXISTS
DROP TABLE IF EXISTS
DROP FUNCTION IF EXISTS
ROP PROCEDURE IF EXISTS

Но всё создаётся и всё вроде как ОК... воть...
Что не так?
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610327
rick1177
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл файл прикрепить (на этом форуме нельзя изменить опубликованное сообщение? - странно))
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610339
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rick1177Все проблемы всегда возникаю с командами:Вы имеете в виду warning(s) в приведенном логе? Это далеко не всегда проблема.
Если будет error(s) - это проблема. Например, если уберете IF EXISTS при удалении несуществующей таблицы.

Другие проблемы есть?
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610340
rick1177
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, собственно? других проблем нет, кроме той, что Navicat не хочет экспортировать aql запрос. Workbench сделал это.... но причина проблем не ясна((
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610347
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rick1177Navicat не хочетПочему бы не задать вопрос техподдержке Navicat, если с ним такие проблемы? Тем более, чтоrick1177Workbench сделал этоМожно его использовать, если с ним нет проблем.

Хотя, как выше уже сказали, штатной консоли вполне достаточно для изучения. Чтобы не печатать руками и не копипастить портянки кода, там есть волшебная команда source (она же "\."), которой можно выполнить запросы из текстового файла. Не помешает текстовый редактор, вроде блокнота, для создания/правки файлов.
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610349
rick1177
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, Вы все говорите про штатную консоль ... но что это, где это?
Я ведь только начал) Где прочитать? Спасибо)
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610355
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Консоль запускается командой mysql (или mysql.exe для винды) из оболочки или из командной строки виндовз.
Например, так:
Код: sql
1.
mysql -u root -p 



Подробные инструкции смотрите в документации https://dev.mysql.com/doc/refman/5.7/en/invoking-programs.html - там несколько страниц с довольно полным описанием на все случаи жизни.
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610367
rick1177
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите за тупизм....
Запустил командную строку cmd, написал MySQL и получил "MySQL не является внутренней или внешней командой, исполняемой программой или пакетным фалом". Что делать дальше?
...
Рейтинг: 0 / 0
Помощь новичку (предупреждения при выплднении MySQL запроса)
    #39610370
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох уж эти ваши виндовз, совсем думать отучили... Может быть, есть смысл научиться запускать программы какими-то отличными от клика или дабл-клика способами? ;-)

Варианты:
1. Вызвать команду с полным путем
2. Перейти перед запуском в директорию, где этот mysql.exe лежит
3. Добавить этот путь в PATH
4. Сделать на рабочем столе ярлык (см. п1) и запускать привычным дабл-кликом
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помощь новичку (предупреждения при выплднении MySQL запроса)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]