Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1 2
Подскажите...Создать индекс для конкретного поля таблицы....
Я правильно сделал...?
Отредактированно Vic (27.01.2012 17:12:03)
Неактивен
Синтаксически верно, да. А если вопрос был в том - стоило ли это делать, то это можно определить только если Вы приведете запросы, для ускорения которых Вы этот индекс создавали .
Неактивен
Вот такое задание...
1. Создать базу данных test.
2. Просмотреть базы данных
3. Выбрать базу данных test для работы с ней.
4. Создать 3 таблицы (определить ключевые поля)
4.1. Продавцы (номер продавца, ФИО, телефон)
4.2. Товары (номер товара, название, цена)
4.3. Продажи (номер продажи, номер товара, номер продавца, дата, количество)
5. Заполнить таблицы записями, минимум 5 в каждой таблице.
6. Создать индекс для поля название таблицы товары
а вот как я сделал...правильно ли это?
Отредактированно Vic (27.01.2012 18:33:55)
Неактивен
Похоже на правду. Преподаватель одобрил?
Неактивен
))дело в том, что я не понимаю почему не получаются вот эти запросы:
-Выборка название товаров проданных в заданный промежуток дат. Например с 12.01.2012 по 15.01.2012
-Выборка названия товара, которого продано само много за все время.
Неактивен
А что значит "не получаются"? Ошибку выдаёт или просто не то возвращают? Покажите сами запросы.
Неактивен
я все в документе выложил...(ниже)
Неактивен
Первый запрос не работает так как в таблице tovar нет поля date.
Кстати, не стоит использовать в качестве названий ключевые слова, например date, а если все же используете, то заключайте их в обратные кавычки `date`.
Обратите внимание, что второй запрос выдает вам предупреждение (1 warning)
Чтобы получить подробную информацию используйте сразу после проблемного запроса команду
show warnings;
Чтобы понять почему идет неправильная выборка, выполните
select * from sale,tovar;
Неактивен
Выкладывайте результаты сразу в топике, а то неудобно скачивать, смотреть файл и нет возможности скопировать с картинки.
В клиенте mysql щелкаете правой кнопкой, выбираете выделить, выделяете нужный кусок и нажимаете enter. Выделенный ранее кусок в буфере обмена и вставляете его в пост на форуме.
Неактивен
спасибо...проверим...
Неактивен
Что-то не правильно выполняется....
mysql> select * from sale, tovar;
+---------+----------+-------------+------------+--------+----------+----------+
--------+
| sale_id | tovar_id | prodavec_id | date | kolich | tovar_id | name |
price |
+---------+----------+-------------+------------+--------+----------+----------+
--------+
| 3 | 2 | 3 | 2000-05-17 | 1 | 1 | Стекло |
234586 |
| 3 | 2 | 3 | 2000-05-17 | 1 | 2 | Радиатор |
431257 |
| 3 | 2 | 3 | 2000-05-17 | 1 | 3 | Цемент |
135782 |
| 3 | 2 | 3 | 2000-05-17 | 1 | 4 | Унитаз |
453124 |
| 3 | 2 | 3 | 2000-05-17 | 1 | 5 | Кабель |
57123 |
| 111 | 4 | 3 | 2011-01-04 | 145 | 1 | Стекло |
234586 |
| 111 | 4 | 3 | 2011-01-04 | 145 | 2 | Радиатор |
431257 |
| 111 | 4 | 3 | 2011-01-04 | 145 | 3 | Цемент |
135782 |
| 111 | 4 | 3 | 2011-01-04 | 145 | 4 | Унитаз |
453124 |
| 111 | 4 | 3 | 2011-01-04 | 145 | 5 | Кабель |
57123 |
| 123 | 1 | 3 | 1999-05-31 | 16 | 1 | Стекло |
234586 |
| 123 | 1 | 3 | 1999-05-31 | 16 | 2 | Радиатор |
431257 |
| 123 | 1 | 3 | 1999-05-31 | 16 | 3 | Цемент |
135782 |
| 123 | 1 | 3 | 1999-05-31 | 16 | 4 | Унитаз |
453124 |
| 123 | 1 | 3 | 1999-05-31 | 16 | 5 | Кабель |
57123 |
| 345 | 1 | 2 | 2000-01-12 | 19 | 1 | Стекло |
234586 |
| 345 | 1 | 2 | 2000-01-12 | 19 | 2 | Радиатор |
431257 |
| 345 | 1 | 2 | 2000-01-12 | 19 | 3 | Цемент |
135782 |
| 345 | 1 | 2 | 2000-01-12 | 19 | 4 | Унитаз |
453124 |
| 345 | 1 | 2 | 2000-01-12 | 19 | 5 | Кабель |
57123 |
| 345 | 5 | 2 | 1999-01-12 | 14 | 1 | Стекло |
234586 |
| 345 | 5 | 2 | 1999-01-12 | 14 | 2 | Радиатор |
431257 |
| 345 | 5 | 2 | 1999-01-12 | 14 | 3 | Цемент |
135782 |
| 345 | 5 | 2 | 1999-01-12 | 14 | 4 | Унитаз |
453124 |
| 345 | 5 | 2 | 1999-01-12 | 14 | 5 | Кабель |
57123 |
| 789 | 5 | 1 | 2005-05-07 | 45 | 1 | Стекло |
234586 |
| 789 | 5 | 1 | 2005-05-07 | 45 | 2 | Радиатор |
431257 |
| 789 | 5 | 1 | 2005-05-07 | 45 | 3 | Цемент |
135782 |
| 789 | 5 | 1 | 2005-05-07 | 45 | 4 | Унитаз |
453124 |
| 789 | 5 | 1 | 2005-05-07 | 45 | 5 | Кабель |
57123 |
+---------+----------+-------------+------------+--------+----------+----------+
--------+
30 rows in set (0.00 sec)
Неактивен
Что тут не так...
mysql> desc prodavci;
+-------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+-------+
| prodavec_id | int(10) unsigned | NO | PRI | NULL | |
| fio | varchar(20) | NO | | NULL | |
| phone | int(11) | NO | | NULL | |
+-------------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> desc tovar;
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| tovar_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | UNI | NULL | |
| price | int(11) | NO | | NULL | |
+----------+------------------+------+-----+---------+----------------+
3 rows in set (0.02 sec)
mysql> desc sale;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| sale_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| tovar_id | int(10) unsigned | NO | PRI | NULL | |
| prodavec_id | int(10) unsigned | NO | PRI | NULL | |
| date | date | NO | | NULL | |
| kolich | int(11) | NO | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
Неактивен
может нужно primary key убрать в tovar_id, в таблице sale?
Неактивен
Vic написал:
Что-то не правильно выполняется....
Очень даже правильно. Вы делаете прямое произведение таблиц, т.е. для каждой строки из первой выбираются все из второй. Я и предложил вам выполнить этот запрос, чтобы наглядно это увидеть.
Нужно объеденять таблицы по условию
http://dev.mysql.com/doc/refman/5.5/en/join.html
Неактивен
благодарю...сейчас попробую разобраться...
Неактивен
Получилось так...
mysql> select * from tovar inner join sale on tovar.tovar_id=sale.tovar_id;
+----------+----------+--------+---------+----------+-------------+------------+
--------+
| tovar_id | name | price | sale_id | tovar_id | prodavec_id | date |
kolich |
+----------+----------+--------+---------+----------+-------------+------------+
--------+
| 1 | Стекло | 234586 | 123 | 1 | 3 | 1999-05-31 |
16 |
| 1 | Стекло | 234586 | 345 | 1 | 2 | 2000-01-12 |
19 |
| 2 | Радиатор | 431257 | 3 | 2 | 3 | 2000-05-17 |
1 |
| 4 | Унитаз | 453124 | 111 | 4 | 3 | 2011-01-04 |
145 |
| 5 | Кабель | 57123 | 345 | 5 | 2 | 1999-01-12 |
14 |
| 5 | Кабель | 57123 | 789 | 5 | 1 | 2005-05-07 |
45 |
+----------+----------+--------+---------+----------+-------------+------------+
--------+
6 rows in set (0.00 sec)
....но как сделать запрос, чтобы....where date > 2000-01-01 or < 2011-01-01?
Неактивен
Отредактированно deadka (29.01.2012 03:09:32)
Неактивен
забыл вставить перед date sale.
но все-равно не получается выборка по дате...
mysql> select * from tovar inner join sale on tovar.tovar_id=sale.tovar_id where
sale.date>='2000-01-01' or sale.date<'2011-01-01';
+----------+----------+--------+---------+----------+-------------+------------+
--------+
| tovar_id | name | price | sale_id | tovar_id | prodavec_id | date |
kolich |
+----------+----------+--------+---------+----------+-------------+------------+
--------+
| 1 | Стекло | 234586 | 123 | 1 | 3 | 1999-05-31 |
16 |
| 1 | Стекло | 234586 | 345 | 1 | 2 | 2000-01-12 |
19 |
| 2 | Радиатор | 431257 | 3 | 2 | 3 | 2000-05-17 |
1 |
| 4 | Унитаз | 453124 | 111 | 4 | 3 | 2011-01-04 |
145 |
| 5 | Кабель | 57123 | 345 | 5 | 2 | 1999-01-12 |
14 |
| 5 | Кабель | 57123 | 789 | 5 | 1 | 2005-05-07 |
45 |
+----------+----------+--------+---------+----------+-------------+------------+
--------+
6 rows in set (0.00 sec)
Неактивен
sale.date>='2000-01-01' or sale.date<'2011-01-01' -- равносильно любой дате
Неактивен
Переименовал столбец data на datka (на всякий случай)...
и даже просто по такому запросу ничего не выходит
mysql> select datka from sale inner join tovar on sale.tovar_id=tovar.tovar_id w
here sale.datka>=2005;
+------------+
| datka |
+------------+
| 2000-05-17 |
| 2011-01-04 |
| 1999-05-31 |
| 2000-01-12 |
| 1999-01-12 |
| 2005-05-07 |
+------------+
6 rows in set, 1 warning (0.00 sec)
опять же выдает все даты
Неактивен
warning кто проверять будет?
>='2005-01-01'
или year(sale.datka)>=2005
Неактивен
...причина была всего лишь в ' '.
Спасибо большое)
mysql> select datka from sale inner join tovar on sale.tovar_id=tovar.tovar_id w
here sale.datka>='2000-01-01' and sale.datka<='2005-05-07';
+------------+
| datka |
+------------+
| 2000-05-17 |
| 2000-01-12 |
| 2005-05-07 |
+------------+
3 rows in set (0.00 sec)
mysql> select name from sale inner join tovar on sale.tovar_id=tovar.tovar_id wh
ere sale.datka>='2000-01-01' and sale.datka<='2005-05-07';
+----------+
| name |
+----------+
| Радиатор |
| Стекло |
| Кабель |
+----------+
3 rows in set (0.00 sec)
Неактивен
А можно еще вопрос...
...я наверное не правильно делаю
mysql> select name from sale inner join tovar on sale.tovar_id=tovar.tovar_id wh
ere sale.kolich=max(kolich);
ERROR 1111 (HY000): Invalid use of group function
мне нужно чтобы нашло найбольшую цену и вывело имя этого товара.
Неактивен
Неактивен
ошибся, не макс число, а название товара, которого продано само много за все время....подскажите плих хоть примерно что начать делать...
Неактивен
Страниц: 1 2