Отправляет email-рассылки с помощью сервиса Sendsay

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

  Все выпуски  

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4008
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 1761
∙ повысить рейтинг »
Чичерин Вадим Викторович
Статус: Профессионал
Рейтинг: 356
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Базы данных / MySQL

Номер выпуска:495
Дата выхода:07.06.2014, 15:09
Администратор рассылки:Абаянцев Юрий Леонидович aka Ayl (Профессионал)
Подписчиков / экспертов:62 / 29
Вопросов / ответов:3 / 9

Консультация # 106489: Добрый день! Интересует вопрос оператор лог. ИЛИ (OR) по идее дает 1 если хотя бы 1 единица. А в БД проверяет значение обоих операндов, по идее если первый в условии истинен то второго касаться проверка вообще не должна... Или это зависит от настройки СУБД?...


Консультация # 50840: Здравствуйте уважаемые эксперты! У меня такой вопрос: есть БД с 2-мя таблицами: 1-я таблица(PLACES) содержит 2 поля: PlaceID(integer, уникальное) и PlaceName(varchar). 2-я таблица(CARS) содержит поля CarID(integer, уникальное), PlaceID(integer), CarName(varchar). Можно ли создать такой SQL-запрос, который вернет набор данных вида (...
Консультация # 183545: Здравствуйте! У меня возникли сложности с таким вопросом: Необходимо составить запрос по двум таблицам "категории" и "фото" ,что бы в итоговой таблице зыписи сортировались по категории и в каждой категории по порядку вывода (колонка order) например : фото из таблицы "фото" с id_foto 145,198,152 относятся к 12-й ка...

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

Добрый день!
Интересует вопрос оператор лог. ИЛИ (OR) по идее дает 1 если хотя бы 1 единица. А в БД проверяет значение обоих операндов, по идее если первый в условии истинен то второго касаться проверка вообще не должна...
Или это зависит от настройки СУБД?

Дата отправки: 23.10.2007, 15:03
Вопрос задал: Hoolio
Всего ответов: 4
Страница онлайн-консультации »


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

Здравствуйте, Hoolio!
Вы не совсем правы. Если, допустим, первый операнд 1, то проверка не доходит до второго. Если 0, то проверяется следующий, и т.д. То есть OR возвращает 1 только в случае того как в условии будет найдена первая 1. (имеется в виду булевы значения).

Консультировал: Powoditch konstantin
Дата отправки: 23.10.2007, 15:24
Рейтинг ответа:

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


Консультирует Тесленко Евгений Алексеевич:

Здравствуйте, Hoolio!
В СУДБ логические выражения работают по обычной логике (AND, OR)
При этом если выражение состоит из нескольких операторов, проверку на истиность пройдут все.
Исключение составляет значение содержащее Null, при нем логические выражения ведут себя по правилам конкретной СУБД.

Консультировал: Тесленко Евгений Алексеевич
Дата отправки: 23.10.2007, 16:51
Рейтинг ответа:

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


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

Здравствуйте, Hoolio!
Небольшое замечание по Oracle - проверка идет с конца и как только встретиться выражение, дающее TRUE, то остальные проверки уже не выполняются

Консультировал: Nomadfromx2007
Дата отправки: 24.10.2007, 05:38
Рейтинг ответа:

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


Консультирует Челноков Виктор Альбертович (Студент):

Здравствуйте, Hoolio!

Наиболее часто лог. операторы используются в предложении where для выборки определенных значений и поэтому проверяются все выражения.
Пример:
tabl1
id int

select * from tabl1
where (id=3) or (id=7)
выбираются строки со значениями id 3 или 7
от настроек СУБД это не зависит.

Консультировал: Челноков Виктор Альбертович (Студент)
Дата отправки: 24.10.2007, 07:44
Рейтинг ответа:

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

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

Здравствуйте уважаемые эксперты!

У меня такой вопрос: есть БД с 2-мя таблицами: 1-я таблица(PLACES) содержит 2 поля: PlaceID(integer, уникальное) и PlaceName(varchar).
2-я таблица(CARS) содержит поля CarID(integer, уникальное), PlaceID(integer), CarName(varchar). Можно ли создать такой SQL-запрос, который
вернет набор данных вида (<PlaceName>, <Число_записей_из_таблицы_Cars_где_Cars.PlaceID=Places.PlaceID>) для ВСЕХ записей таблицы Places.
То есть, для КАЖДОГО места(PlaceName) выводилось бы число машин, которые там находятся.
Причем, хотелось бы, чтобы это была хранимая процедура или представление, так как хочется максимально вынести логику из приложения и
взвалить ее на сервер БД (Firebird 1.5.3).

Заранее огромное спасибо!

Дата отправки: 02.08.2006, 00:11
Вопрос задал: Балашов Григорий
Всего ответов: 3
Страница онлайн-консультации »


Консультирует Козлов Алексей Сергеевич:

Здравствуйте, Балашов Григорий!
Я не знаю как сделать хранимую процедуру или представление, а SQL-запрос такой:
SELECT Place.Name, COUNT(Car.ID) FROM places, cars WHERE Cars.PlaceID=Place.PlaceID GROUP BY Place.PlaceName

Консультировал: Козлов Алексей Сергеевич
Дата отправки: 02.08.2006, 07:22
Рейтинг ответа:

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


Консультирует Александр Шевченко:

Здравствуйте, Балашов Григорий!
С созданием хранимой процедуры или представления помочь не могу, так как с Firebird не работал, а запрос будет такой:
select places.PlaceName, count(cars.carname) as CarsCount from places inner join cars on places.placeid=cars.placeid group by places.placename

Консультировал: Александр Шевченко
Дата отправки: 02.08.2006, 09:01
Рейтинг ответа:

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


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

Здравствуйте, Балашов Григорий!

На мой взгляд хранимая процедура тут не совсем уместна,
а представление создается так: (см. приложение)

Представление называется v_places_cars (имя может быть любым другим)
Работать с им можно как с обычной талицей: select id,name,cars from v_places_cars

Также я добавил в представление еще и поле placeid поскольку оня явно может пригодиться.

Приложение:

Консультировал: LastSoul
Дата отправки: 02.08.2006, 14:00
Рейтинг ответа:

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

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

Здравствуйте! У меня возникли сложности с таким вопросом:
Необходимо составить запрос по двум таблицам "категории" и "фото" ,что бы в итоговой таблице зыписи сортировались по категории и в каждой категории по порядку вывода (колонка order) например : фото из таблицы "фото" с id_foto 145,198,152 относятся к 12-й категории необходимо ,что бы id_foto 12-й категории вывелись в следующем порядке -согласно значениям в колонке order – 198, 145, 152 В запросе необходимо использовать конструкцию SQL_CALC_FOUND_ROWS . Используется MySQL сервер Apache.
Спасибо.

Категории

id category
1 1
2 3
3 5
4 8
5 3
6 3
7 5
8 12
9 3


Фото

id_foto category order
135 1 0
111 1 1
114 8 1
101 5 2
145 12 2
198 12 0
152 12 3
187 5 4
114 3 4


Ит оговая таблица -которая должна получится в результате запроса

id_foto category order
135 1 0
111 1 1
114 3 4
101 5 2
187 5 4
114 8 1
198 12 0
145 12 2
152 12 3




Дата отправки: 07.06.2011, 23:21
Вопрос задал: Dima1967
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Коцюрбенко Алексей aka Жерар (Советник):

Здравствуйте, Dima1967!

Запрос будет иметь следующий вид

Код (SQL):
SELECT SQL_CALC_FOUND_ROWS id_foto, category, `order` FROM "фото" ORDER BY category, `order`


Здесь "фото" - имя таблицы фотографий, имя поля `order` взято в обратные кавычки, чтобы не было совпадения с ключевым словом ORDER.

Есть, правда, некоторые неясности (или я не совсем понял вопрос):

1. Для чего в запросе необходимо использовать конструкцию SQL_CALC_FOUND_ROWS, если не предполагается ограничение LIMIT и последующий запрос SELECT FOUND_ROWS()? Или Вы про них не упомянули?

2. Для чего нужна таблица Категории, если таблица Фото никак с ней не связана?

Консультировал: Коцюрбенко Алексей aka Жерар (Советник)
Дата отправки: 08.06.2011, 04:11

5
1."...Для чего в запросе необходимо использовать конструкцию SQL_CALC_FOUND_ROWS..." - я про это не упомянул-но это всё используется для счётчика страниц.
2. Она не нужна - просто мне не надо было ночью отправлять вопрос ,а утром, перечитать его на свежую голову и отправить))) - ещё раз большое спасибо,у меня вызвала сложность группировка - не знал,что в order by - можно перечислить всё через запятую.

-----
Дата оценки: 08.06.2011, 16:19

Рейтинг ответа:

НЕ одобряю +1 одобряю!


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

Доброе время суток, Dima1967!

Я так понимаю у вас есть три таблицы `category`, `photo` и `new_photo`. Таблицы выглядят примерно так:

`category` имеет `id` и`category`
`photo` имеет ``id_foto`, `category` и `order`
`new_photo` имеет ``id_foto`, `category` и `order` и пока пустая.

Вам необходимо отсортировать две таблицы указанным образом и сохранить в `new_photo`. Для этого необходимо воспользоваться следующим запросом:

Код (SQL):
INSERT INTO `new_photo`
      SELECT SQL_CALC_FOUND_ROWS DISTINCT
        photo.id_foto, photo.category, photo.order
      FROM
        photo INNER JOIN category ON category.category = photo.category
      ORDER BY
        photo.category ASC, photo.order ASC


Отсортированные данные будут занесены в пустую таблицу.

DISTINCT в данном случае очень важен, в ином случае мы получим повторяющиеся строки.

Удачи!

Консультировал: Kosmos Kosmonaft
Дата отправки: 09.06.2011, 01:43
Рейтинг ответа:

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


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

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

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


© 2001-2012, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А. | Гладенюк А.Г.
Версия системы: 2011.6.36 от 26.01.2012

В избранное