Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.162 c
15-1198582118
Иксик
2007-12-25 14:28
2008.02.03
С Рождеством!


1-1193237925
JanMihail
2007-10-24 18:58
2008.02.03
Контекстное меню для Компакт-диска


11-1183049737
Nikfel
2007-06-28 20:55
2008.02.03
Как создать свой компонент.


1-1193417311
terc
2007-10-26 20:48
2008.02.03
получения род окна зная hwnd дочернего ??


2-1199783028
Washington
2008-01-08 12:03
2008.02.03
Нужно преобразовать строку в комманду





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский