SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.01.2012 17:11:07

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Подскажите...Создать индекс для конкретного поля таблицы....

Подскажите...Создать индекс для конкретного поля таблицы....
Я правильно сделал...?

Отредактированно Vic (27.01.2012 17:12:03)


Прикрепленные файлы:
Attachment Icon 15678nv.bmp, Размер: 286,470 байт, Скачано: 912

Неактивен

 

#2 27.01.2012 17:18:33

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Синтаксически верно, да. А если вопрос был в том - стоило ли это делать, то это можно определить только если Вы приведете запросы, для ускорения которых Вы этот индекс создавали wink.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 27.01.2012 18:32:21

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Вот такое задание...
1.    Создать базу данных test.
2.    Просмотреть базы данных
3.    Выбрать базу данных test для работы с ней.
4.    Создать 3 таблицы (определить ключевые поля)
4.1.    Продавцы  (номер продавца, ФИО, телефон)
4.2.    Товары (номер товара, название, цена)
4.3.    Продажи (номер продажи, номер товара, номер продавца, дата, количество)
5.    Заполнить таблицы записями, минимум 5 в каждой таблице.
6.    Создать индекс для поля название таблицы товары

а вот как я сделал...правильно ли это?

Отредактированно Vic (27.01.2012 18:33:55)


Прикрепленные файлы:
Attachment Icon 1132r.jpg, Размер: 75,598 байт, Скачано: 515

Неактивен

 

#4 27.01.2012 19:24:21

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Похоже на правду. Преподаватель одобрил?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 27.01.2012 19:43:47

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

))дело в том, что я не понимаю почему не получаются вот эти запросы:
-Выборка название товаров проданных в заданный промежуток дат. Например с 12.01.2012 по 15.01.2012
-Выборка названия товара, которого продано само много за все время.

Неактивен

 

#6 27.01.2012 19:45:55

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Подскажите...Создать индекс для конкретного поля таблицы....

А что значит "не получаются"? Ошибку выдаёт или просто не то возвращают? Покажите сами запросы.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 27.01.2012 20:00:42

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

я все в документе выложил...(ниже)


Прикрепленные файлы:
Attachment Icon Документ Microsoft Word (2).doc, Размер: 76,288 байт, Скачано: 655

Неактивен

 

#8 27.01.2012 20:23:02

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Первый запрос не работает так как в таблице tovar нет поля date.
Кстати, не стоит использовать в качестве названий ключевые слова, например date, а если все же используете, то заключайте их в обратные кавычки `date`.

Обратите внимание, что второй запрос выдает вам предупреждение (1 warning)
Чтобы получить подробную информацию используйте сразу после проблемного запроса команду
show warnings;


Чтобы понять почему идет неправильная выборка, выполните
select * from sale,tovar;

Неактивен

 

#9 27.01.2012 20:26:07

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Выкладывайте результаты сразу в топике, а то неудобно скачивать, смотреть файл и нет возможности скопировать с картинки.

В клиенте mysql щелкаете правой кнопкой, выбираете выделить, выделяете нужный кусок и нажимаете enter. Выделенный ранее кусок в буфере обмена и вставляете его в пост на форуме.

Неактивен

 

#10 27.01.2012 23:05:04

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

спасибо...проверим...

Неактивен

 

#11 28.01.2012 12:24:24

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Что-то не правильно выполняется....


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)

Неактивен

 

#12 28.01.2012 12:26:00

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Что тут не так...

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)

Неактивен

 

#13 28.01.2012 12:27:26

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

может нужно primary key убрать в tovar_id, в таблице sale?

Неактивен

 

#14 28.01.2012 13:26:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Vic написал:

Что-то не правильно выполняется....

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

Нужно объеденять таблицы по условию
http://dev.mysql.com/doc/refman/5.5/en/join.html

Неактивен

 

#15 28.01.2012 15:25:41

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

благодарю...сейчас попробую разобраться...

Неактивен

 

#16 29.01.2012 02:58:10

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Получилось так...
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?

Неактивен

 

#17 29.01.2012 03:08:31

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Подскажите...Создать индекс для конкретного поля таблицы....

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'

Отредактированно deadka (29.01.2012 03:09:32)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#18 29.01.2012 14:38:03

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

забыл вставить перед 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)

Неактивен

 

#19 29.01.2012 14:51:32

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подскажите...Создать индекс для конкретного поля таблицы....

sale.date>='2000-01-01' or sale.date<'2011-01-01'  -- равносильно любой дате

Неактивен

 

#20 29.01.2012 14:57:38

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

Переименовал столбец 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)

опять же выдает все даты

Неактивен

 

#21 29.01.2012 15:12:19

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подскажите...Создать индекс для конкретного поля таблицы....

warning кто проверять будет?

>='2005-01-01'
или year(sale.datka)>=2005

Неактивен

 

#22 29.01.2012 15:47:15

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

...причина была всего лишь в ' '.
Спасибо большое)

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)

Неактивен

 

#23 29.01.2012 15:50:21

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

А можно еще вопрос...
...я наверное не правильно делаю

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

мне нужно чтобы нашло найбольшую цену и вывело имя этого товара.

Неактивен

 

#24 29.01.2012 16:30:18

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Подскажите...Создать индекс для конкретного поля таблицы....

select name, max(kolich) from sale inner join tovar on sale.tovar_id=tovar.tovar_id group by 1 ordr by 2 desc limit 1;

Неактивен

 

#25 29.01.2012 17:12:43

Vic
Участник
Зарегистрирован: 27.01.2012
Сообщений: 18

Re: Подскажите...Создать индекс для конкретного поля таблицы....

ошибся, не макс число, а название товара, которого продано само много за все время....подскажите плих хоть примерно что начать делать...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson