RFpro.ru: Базы данных MySQL

  Все выпуски  

RFpro.ru: Базы данных MySQL


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Alexander Babich
Статус: Профессор
Рейтинг: 1
∙ повысить рейтинг »
solowey
Статус: Профессор
Рейтинг: 0
∙ повысить рейтинг »
SAW
Статус: Студент
Рейтинг: 0
∙ повысить рейтинг »

∙ Базы данных

Номер выпуска:552
Дата выхода:10.02.2021, 17:15
Администратор рассылки:Коцюрбенко Алексей Владимирович (Старший модератор)
Подписчиков / экспертов:21 / 16
Вопросов / ответов:3 / 11

Консультация # 108555: Привет всем! Подскажите, как отсортировать строки по определенному полю, с учетом такой штуки: Если значение этого поля рано нулю или его нет, то использовать значени другого поля?...
Консультация # 60162: Добрый день. Можно ли как-то проверить есть ли в базе данных таблица с определённым именем? Нужно создать таблицу в БД, но только в том случае, если такой таблицы ещё нет....
Консультация # 91846: Здратсти всем пытаюсь прогрммировать на Borland C++ builde, подскажите как вставить в таблицу запись, с данными из Edit1 и Edit2, пытался строкой Insert Into opl.db (fild1) Values (Ediit1->Text), так он ругается на Ediit1->Text, подскажите т/к/ я уже замучился, все п...

Консультация # 108555:

Привет всем!
Подскажите, как отсортировать строки по определенному полю, с учетом такой штуки: Если значение этого поля рано нулю или его нет, то использовать значени другого поля?

Дата отправки: 08.11.2007, 13:06
Вопрос задал: Stals
Всего ответов: 3
Страница онлайн-консультации »


Консультирует HookEst:

Здравствуйте, Stals!
если поля числовые и положительные можно использовать Greatest():
SELECT `f1`,`f2` FROM `table` ORDER BY GREATEST(`f1`,`f2`)

в противном случае, можно так и писать:
SELECT `f1`,`f2` FROM `table` ORDER BY IF(`f1` IS NULL OR `f1`=0,`f2`,`f1`)

Успехов.

Консультировал: HookEst
Дата отправки: 08.11.2007, 13:57
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Netizen:

Здравствуйте, Stals!
Можно ставить условие OR (ИЛИ). Тогда получается, что если в левой части условие не исполняется переходим к правой части!

Консультировал: Netizen
Дата отправки: 08.11.2007, 14:46
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Nomadfromx2007:

Здравствуйте, Stals!
Предлагаю создать доп.поле с нужным условием и уже по этому полю делать сортировку.

Приложение:

Консультировал: Филатов Евгений Геннадьевич
Дата отправки: 25.10.2006, 20:01
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Архангельский Андрей Германови:

Здравствуйте, Вiктор!

Все зависит от типа СУБД.
Как правило есть системные таблицы описывающие архитектуру БД, соответственно есть таблица, которая содержит перечень таблиц и их полей.
К этим таблицам можно сделать запрос.
В Firebird эта таблица называется rdb$relations, а в ней поле rdb$relations_name в котором имена таблиц

Консультировал: Архангельский Андрей Германови
Дата отправки: 25.10.2006, 20:35
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Grigory:

Здравствуйте, Вiктор!
Если вы имеете дело с SQL Server 2000, то это можно проверить с помощью вот такого запроса:
SELECT count(*)
FROM sysobjects
WHERE (name = \'имя вашей таблицы\')
Этот запрос вернет 1 если такая таблица уже в вашей БД есть, и 0 - если такой таблицы нет.
В Oracle это делается вот так:
входите в SQL Plus в качестве пользователя с правами доступа к этой таблице и вводите:
select count(*) from cat where table_name = \'имя вашей таблицы\';

Удачи!

Консультировал: Grigory
Дата отправки: 25.10.2006, 20:49
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Марк Крейн:

Здравствуйте, Вiктор!
Как всегда соригинальничаю. Хотя то что я сейчас скажу, несмотря на свою дикость, работает. Проверялось только на MySQL. Итак, код:

SELECT * from table where (1=0)

Если выполнится без проблем, значит таблица table существует, в противном случае её нет. Я сам когда прочитал об этом в интернете был поражён (как может 1 равняться нулю??). Но тем не менее факт остаётся фактом - всё прекрасно работает.

Консультировал: Марк Крейн
Дата отправки: 25.10.2006, 21:03
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует HookEst:

Здравствуйте, Вiктор!
Мне отвечать проще, я знаю вашу СУБД...
В MySQL 3.23 и выше, Вы можете использовать IF NOT EXISTS так, что если таблица с таким именем уже существует - ошибки не возникнет(структура имеющейся таблицы не проверяется и не обновляется!!!).
например:

CREATE TABLE IF NOT EXISTS `users` (`id` INT(11), `name` VARCHAR(32));
INSERT INTO `users` ...
чтобы быть увереным также и в структуре таблицы, можно сначала безопасно удалять таблицу, потом создавать:

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`id` INT(11), `name` VARCHAR(32));
INSERT INTO `users` ...

Успехов.

Консультировал: HookEst
Дата отправки: 26.10.2006, 05:36
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 91846:

Здратсти всем
пытаюсь прогрммировать на Borland C++ builde, подскажите как вставить в таблицу запись, с данными из Edit1 и Edit2,
пытался строкой Insert Into opl.db (fild1) Values (Ediit1->Text), так он ругается на Ediit1->Text, подскажите т/к/ я уже замучился, все п

Дата отправки: 18.06.2007, 03:28
Вопрос задал: Michail_bal
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Blohin Ole:

Здравствуйте, Michail_bal!
Компилятор ругается, потому что значение Edit1->Text есть значение типа AnsiString, которое не может быть использовано напрямую.
Попробуйте вот так: INSERT INTO opl.db (fild1) VALUES (Edit1->Text.c_str()).

Консультировал: Blohin Ole
Дата отправки: 18.06.2007, 08:18
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Виктор Пырлик:

Здравствуйте, Michail_bal!
Во первых, конструкция команда «insert into» преднозначена для выполнениея кода SQL и к С++Builder не имеет отношения. Если хотите использовать такую команду, надо тогда сформировать правильно запрос в виде строки. Например:
String s = “Insert Into opl.db (fild1) Values (‘“+Ediit1->Text+”’ )”;
Или, коль уж работаем на С/С++:
Char s[255] = {0};
Sprintf(s,” Insert Into opl.db (fild1) Values (‘%s’)”, Ediit1->Text.c_str());
//для компонентов TQuery
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(s);
ADOQuery1->ExecSQL();
// ИЛИ для выполнения кода на сервере
ADOCommand1->CommandText = s;
ADOCommand1->Execute();

Иначе, просто надо пользоваться свойствами Insert() или InsertRecord().
Tbl->Insert();
// работаем/ добовляем данные в таблицу
Tbl->Post(); // сохраняем записи

Для InsertRecord:
Tbl->InsertRecord(ARRAYOFCONST((Edit1->Text,Edit2->Text, Null, Null, Null, Null, Null, Null,NULL)));
В этом случае, надо вводить все значения, если их нет – пишем NULL но все поля должны быть задействованы.

Консультировал: Виктор Пырлик
Дата отправки: 19.06.2007, 12:42
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное