Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.03;
Скачать: CL | DM;

Вниз

Помогите с запросом к БД   Найти похожие ветки 

 
fics ©   (2008-01-08 12:47) [0]

Здравствуйте уважаемые мастера. Есть БД (три таблицы):
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 из таблицы заказов. Не знаю как сделать такой запрос помогите плз.


 
Правильный_Вася   (2008-01-08 13:32) [1]

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


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

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


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


> обычная

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


 
fics ©   (2008-01-08 17:12) [4]


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

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


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

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


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


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


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


 
fics ©   (2008-01-08 18:15) [6]


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


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


 
Anatoly Podgoretsky ©   (2008-01-08 18:52) [7]

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

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


 
fics ©   (2008-01-08 19:01) [8]


> Anatoly Podgoretsky ©

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


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


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

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


 
fics ©   (2008-01-08 19:13) [10]


> Плохиш ©

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

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


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


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

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


 
fics ©   (2008-01-08 19:17) [12]

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


 
fics ©   (2008-01-08 19:21) [13]


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

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


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


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

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


 
fics ©   (2008-01-08 19:51) [15]


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

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


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

Чуваки, а теперь дружно думае если при заполнении БД допустили логическую ошибку т.е. вместо тог что бы изменить кол-во заказа добавили новый пункт?
побиш такой случай:
<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>


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

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


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

Или даже так... одну партию этих книг он заказал на 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;


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


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

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


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


> Malik

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.02.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.021 c
2-1199977556
Footballer
2008-01-10 18:05
2008.02.03
IP-адрес удалённого компа


2-1199575318
koha overload
2008-01-06 02:21
2008.02.03
Помогите разобраться под что модуль написан?


2-1200067787
AntonUSAnoV
2008-01-11 19:09
2008.02.03
работа DB компонентами.


4-1183109513
евнен
2007-06-29 13:31
2008.02.03
форматирование диска без участия пользователя


15-1198911358
VAD*Anti Gopn!k
2007-12-29 09:55
2008.02.03
Электрогитара и компьютер.