Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с запросом к БД [D7, IB6.x]


Страницы:   1 2

fics ©   (2008-01-08 12:47:00) 

Здравствуйте уважаемые мастера. Есть БД (три таблицы):
1) клиенты customers(customerid, name, address, city). (IbDataSet1)

2) книги book(isbn, autor, title, price);
(IbDataSet2)

3) заказы order_items(customerid, isbn, quantity);
(IbDataSet3)

Как по AfteScroll - у  IbDataSet1 сформировать запрос
чтобы выводились те книги которые заказал один конкретный клиент.

select * from order_items where customerid = тому customerid клиента по которому AfteScroll в  IbDataSet1, но так я выберу данные из таблицы заказов, а нужно вначале "посмотреть в таблицу заказов" , затем вывести из таблицы book книги по isbn из таблицы заказов. Не знаю как сделать такой запрос помогите плз.


Malik   (2008-01-08 21:08:00) [1]

Вообще у меня есть правило: "Пользователи моих прог — обезьяны с гранатами".... Так сказать жизнь научила)))


fics   (2008-01-08 20:59:00) [2]


> Malik

Спасибо конечно. А если добавил одну и ту же книгу вместо того чтобы  Quantity обновить, то пусть её удалит и просто добавить Quantity, Смотреть надо а не ушами хлопать:) это не вам Malik, а подумаете еще, а пользователю.


Правильный_Вася   (2008-01-08 20:57:00) [3]


>  а теперь дружно думае

пусть ишак думает, у него голова большая


Malik   (2008-01-08 20:51:00) [4]

Или даже так... одну партию этих книг он заказал на 1.02.08, а другую партию этих же книг он заказал на 11.03.08, вот правильнее будет такой вариант:
Если взять так
  Books(ID_Book, Author, Book_Name, Price);
  Clients(ID_Client, Client_Name, Adress, City);
  Orders(ID_Client, ID_Book, Date, Quantity).
То запрос по ID_Client будет выглядить так:
SELECT Book_Name, Author,
  SUM(Quantity) as Quantity_Of_Books
 FROM Books,Orders
 WHERE Orders.ID_Client={Номер клиента по которому идет запрос} and
    Orders.ID_Book=Books.ID_Book
 GROUP BY Book_Name, Author;


Malik   (2008-01-08 20:13:00) [5]

Блин!!!
ID_Client | Id_Book | Kol_Vo
1           |1           |12
1           |2           |2
1           |2           | 31


Malik   (2008-01-08 20:10:00) [6]

Чуваки, а теперь дружно думае если при заполнении БД допустили логическую ошибку т.е. вместо тог что бы изменить кол-во заказа добавили новый пункт?
побиш такой случай:
<table>
 <tr>
    <td>ID_Client<td>Id_Book<td>Kol_Vo
 <tr>
    <td>1<td>1<td>12
 <tr>
    <td>1<td>2<td>2
 <tr>
    <td>1<td>2<td>31
</table>


fics   (2008-01-08 19:51:00) [7]


> Правильный_Вася

Да я уже нашел всё спасибо.


Правильный_Вася   (2008-01-08 19:50:00) [8]


> оно не нужно мне DBGrid, но всё же его нужно выбрать

в гриде можно ненужным колонкам (по имени поля определяются) сделать Visible=False


fics   (2008-01-08 19:21:00) [9]


> Правильный_Вася

Ага  понял, но тогда в результат запроса попадет и  oi.isbn, но оно не нужно
мне DBGrid, но всё же его нужно выбрать. Получается какое-то противоречие.


fics   (2008-01-08 19:17:00) [10]

Получается что нужно выбрать селектом oi.isbn и автора и название из book
,а oi.isbn не выводить.


Правильный_Вася   (2008-01-08 19:15:00) [11]


> Что все поля перечислять?

все, нужные тебе для текущей операции
select oi.quantity, b.isbn from...


fics   (2008-01-08 19:13:00) [12]


> Плохиш ©

понятно, что то сразу не сообразил почему так получилось. Ну подскажите плз, будьте так любезны, как выбрать только автора и название книги переделав этот запрос

select * from order_items oi, book b
where oi.isbn=b.isbn and oi.customerid=:x


Плохиш   (2008-01-08 19:07:00) [13]


> fics ©   (08.01.08 19:01) [8]
>
> > Anatoly Podgoretsky ©
>
> Что все поля перечислять?

В данном случае "Да".
Как думаешь, что должна делать бд если у неё просят выполнить запрос на обчединение таблиц имеющих поля с одинаковыми именами?


fics   (2008-01-08 19:01:00) [14]


> Anatoly Podgoretsky ©

Что все поля перечислять?


Anatoly Podgoretsky   (2008-01-08 18:52:00) [15]

> fics  (08.01.2008 18:15:06)  [6]

Не используй *, никогда.


fics   (2008-01-08 18:15:00) [16]


> Loginov Dmitry ©
для добавления нужно использовать оператор INSERT


Я конечно чайник в БД но не совсем пустой, просто при таком запросе
> Правильный_Вася  
> select * from order_items oi, book bwhere oi.isbn=b.isbn
> and oi.customerid=:x
откуда невзмись возникает ещё одно поле isbn1, а в запросе на вставку данных оно мне уж совсем не нужно, я в него и не вставляю данные никакие, а выдаётся ошибка, что isbn1 не может быть пустым


Loginov Dmitry   (2008-01-08 17:52:00) [17]

> Только нужно выбрать автора и название книги, а не все поля
> из двух таблиц


вместо звездочки перечисли через запятую требуемые поля.


> и возникает ошибка что я ему ничего не добавляю, когда пытаюсь
> оформить заказ


для добавления нужно использовать оператор INSERT


fics   (2008-01-08 17:12:00) [18]


> Правильный_Вася  
> select * from order_items oi, book bwhere oi.isbn=b.isbn
> and oi.customerid=:x

Спасибо за помощь. Только нужно выбрать автора и название книги, а не все поля из двух таблиц и ещё появляется поле isbn1(и возникает ошибка что я ему ничего не добавляю, когда пытаюсь оформить заказ), но помощи просить не буду(хотя и не откажусь), попрошу у вас только ссылочку, так чтобы с примерами, вобщем для чайников, а то я только начинаю работать с БД. Сам что то ничего подходящего "из серии для чайников" не нашёл.


Правильный_Вася   (2008-01-08 15:58:00) [19]


> обычная

через кросс-таблицу


Виталий Панасенко(дом)   (2008-01-08 15:52:00) [20]

Мастер-деталь обычная...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо