Форум: "Начинающим";
Текущий архив: 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.039 c