![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с запросом к БД [D7, IB6.x]
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]Мастер-деталь обычная...