Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выдает ошибку
 
 автор: Виктория1   (02.11.2012 в 12:52)   письмо автору
 
 

Ошибка

SQL-запрос:

INSERT INTO goodsgipermarket VALUES (4,"Детское питание», "Тема"); INSERT INTO goodsgipermarket VALUES (4,"Средства для мытья посуды ", "AOS"); INSERT INTO goodsgipermarket VALUES (4,"Колбаса", "Докторская"); INSERT INTO goodsgipermarket VALUES (4,"Молочные изделия", "Кефир Простоквашино"); INSERT INTO goodsgipermarket VALUES (4,"Спиртное", "Мартини"); INSERT INTO goodsgipermarket VALUES (4,"Хлеб", "Нарезной"); INSERT INTO goodsgipermarket VALUES (4,"Яйцо", "Деревенское"); INSERT INTO goodsgipermarket VALUES (4,"Табачные изделия", "L&M"); INSERT INTO goodsgipermarket VALUES (4,"Шампунь", "Elseve"); INSERT INTO goodsgipermarket VALUES (4,"Сосиски", "Венские"); INSERT INTO goodsgipermarket VALUES (5,"Детское питание", "Агуша"); INSERT INTO goodsgipermarket VALUES (5,"Де[...]

Ответ MySQL: Документация
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Тема");
INSERT INTO goodsgipermarket VALUES (4,"Средства для ' at line 1






Ошибка выглядит так, пробую добавить большое количество записей в таблицу....

Помогите либо понять какой тип таблиц нужен,либо как исправить ошибку

  Ответить  
 
 автор: Igorek   (02.11.2012 в 13:08)   письмо автору
 
   для: Виктория1   (02.11.2012 в 12:52)
 

(4,"Детское питание», "Тема");

с кавычками что за галиматья?
русские "елочки" не вариант здесь использовать

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 13:18)   письмо автору
 
   для: Igorek   (02.11.2012 в 13:08)
 

Спасибо большое, что откликнулись)) я их сразу заметила и все заработала, сейчас ошибка состоит в добавлении таблицы)
CREATE TABLE Check (gipermarket_id int(2),check_id int(9), Cost (rub) int (5), sells card int (10),seller char(25), data buy INT(11));

Ошибка
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'check (gipermarket_id int(2),check_id int(9), Cost(rub) int(5), sells card int (' at line 1

Хотелось бы понять, почему в заголовок столбца нельзя написать два слова.

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 13:54)   письмо автору
 
   для: Виктория1   (02.11.2012 в 13:18)
 

Для начала нужно понять, что после словосочетания CREATE TABLE синтаксический анализатор MySQL расчитывает увидеть либо надпись IF NOT EXISTS, либо имя таблицы.

IF NOT EXISTS он не видит, значит CHECK - это имя таблицы.

После этого придется понять, что когда вы говорите MySQL слово CHECK, то после него он ожидает увидеть слово TABLE, т.к. CHECK - это зарезервированное слово и его НЕЛЬЗЯ просто так использовать в качестве любых имен.

Если это все же необходимо - то мускулу необходимо сообщить, что это не часть его синтаксиса, а часть вашей фантазии. Для этого имя нужно заключить в обратные кавычки `check` (расположены там же где буква ё).

Затем можно уже и с именами полей начать разбираться....

И снова глупый глупый MySQL!!! С чего он взял, что после слова, обозначающего имя поля, должен идти тип этого поля? Ну неужели не может догадаться, что пока он не увидит знакомый ему тип данных - все это название столбца таблицы???

Тем не менее - это именно так! Поэтому, чтобы снова подключить свою фантазию к интерпретатору, нам помогут волшебные обратные кавычки:
sells card int (10) - это не правильное поле =(
`Привет бабушке` VARCHAR(255) -это правильное поле! =)

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 13:56)   письмо автору
 
   для: Sfinks   (02.11.2012 в 13:54)
 

Спасибо огромное при огромное!!!!!!!!!!!!!! Прям таки слов нет, все так понятно объяснили!!!!!!! Осталось теперь проверить все запросы)

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 13:57)   письмо автору
 
   для: Виктория1   (02.11.2012 в 13:56)
 

Не плохо было бы еще прочитать ссылки, которые я дал. Вдруг пригодится?

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 14:03)   письмо автору
 
   для: Sfinks   (02.11.2012 в 13:57)
 

Вот кстати я ссылки сейчас читаю!!! Очень полезно!!!
у меня еще даже осталось 2 вопроса.
По поводу ключевых полей. в некоторых таблицах они у меня подразумеваются, а вот в некоторых их просто напросто нет, можно ли оставлять таблицы без ключей?
Знаю,что в аксесе можно было

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 18:54)   письмо автору
 
   для: Виктория1   (02.11.2012 в 14:03)
 

Можно. Но не желательно. Во первых возможны дубликаты, во вторых поиск будет медленным.

  Ответить  
 
 автор: Igorek   (02.11.2012 в 13:58)   письмо автору
 
   для: Виктория1   (02.11.2012 в 13:18)
 

потому что существует определенный синтаксис оператора CREATE TABLE.
Если хотите использовать имя таблицы CHECK, то заключайте его в обратные кавычки.
Что есть cost (rub) ? в скобках это комментарий чтоль? если да, то и сделайте его комментарием:
Cost int (5) COMMENT 'rub'
.
Про два слова - вы же gipermarket_id разделили символом подчеркивания, почему же тогда и остальные "слова" так же не объединить?

И вообще, зачем так себя мучить - используйте хотя бы phpmyadmin. Ошибок меньше будет

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 14:04)   письмо автору
 
   для: Igorek   (02.11.2012 в 13:58)
 

Будет не очень читабельно пользователю через _. Я думаю можно так же через кавычки обратные сделать. RUB -это цена. cost единица измерения rub.
Я как раз через него и делаю все

  Ответить  
 
 автор: Igorek   (02.11.2012 в 15:03)   письмо автору
 
   для: Виктория1   (02.11.2012 в 14:04)
 

1. Зачем вы собираетесь пользователю показывать названия полей вашей базы данных?
2.
RUB -это цена. cost единица измерения rub

вот этого вообще не понял. Вы пытаетесь сказать, что RUB измеряется в COST'ах?
Насколько я понимаю, вам нужно создать поле в котором будет хранится сумма покупки в рублях для определенного чека определенного гипермаркета. так? если да, то тип int вряд ли подойдет. Вы же не округляете до целого сумму покупки? Используйте, float хотя бы.
data buy

это дата покупки? Если да, то используйте специально-предназначенный для этого тип DATETIME

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 19:52)   письмо автору
 
   для: Igorek   (02.11.2012 в 15:03)
 

Спасибо огромное!!!
Помогите
Для каждого покупателя и для каждой группы определить наиболее предпочитаемые им виды товаров
Select sells card from check and goods from contents
Group by sells card and group goods
Where max sells and max group goods

Правильно ли я понимаю запрос?

Как мне добавить записи в таблицу check.
заключала чек в ковычки,и ничего.

  Ответить  
 
 автор: Igorek   (02.11.2012 в 22:28)   письмо автору
 
   для: Виктория1   (02.11.2012 в 19:52)
 

Даже не знаю с чего начать...
1. что за таблица contents?
2. почему вы игнорируете описанное выше требование про обратные кавычки для составных названий полей, раз уж вы решили их использовать?
3. Синтаксис оператора SELECT вы, как я вижу, не решились изучить?
4. "Правильно ли я понимаю запрос" - очень вряд ли.
5. "Как мне добавить записи в таблицу check" - так же, как и в вашем первом сообщении, используя оператор INSERT
6. Почему не желаете использовать клиента для MySQL? Например, как я уже говорил, phpMyAdmin. В нем, чтобы вставить записи, не обязательно INSERT знать

А по запросу - приведите структуру ваших таблиц (вы же их создали уже?), может тогда и сможем помочь. Структуру таблицы можно узнать используя
SHOW CREATE TABLE table_name

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 22:39)   письмо автору
28.8 Кб
 
   для: Igorek   (02.11.2012 в 22:28)
 

Вы ко мне не справедливы.. У меня сегодня день рождения, я сижу пытаюсь разобраться с phpmyadmin.
2. я не игнорирую,я теперь только этими кавычками и пользуюсь.
5. я уже все разобралась и сделала
6. именно им я и пользуюсь,как я говорила выше.
1. состав каждого чека
3.4.я ппросто не понимаю как вместе сделать 2 запроса, это вложенные зпросы будут??

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 22:41)   письмо автору
 
   для: Виктория1   (02.11.2012 в 22:39)
 

Несправедливость в том, что вы вместо праздника разбираетесь с PMA, а не в нашем к вам отношении =)
__________
И кстати
SHOW CREATE TABLE table_name
вы так и не показали

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 22:44)   письмо автору
 
   для: Sfinks   (02.11.2012 в 22:41)
 

я прикрепила фалик, там картинка моих всех таблиц. в рма там дизанер-и оттуда я взяла..)
а что мне разбираться в вашем ко мне отношении? оно надеюсь положительное? даже после таких тупых вопросов

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 22:53)   письмо автору
 
   для: Виктория1   (02.11.2012 в 22:44)
 

Странный у вас PMA.... Или я в нем чего-то не видел.
___________
Разница в том, что результат запроса "SHOW CREATE TABLE" -это текст, который можно копировать и редактировать.... Со скриншотом это сложно.
___________
Ну лично мне эти таблички ни о чем не говорят, хотя бы потому, что по неправильному запросу невозможно понять, что вы хотите и по какому принципу должна производиться выборка.
Может Igorek что поймет?...

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 22:59)   письмо автору
 
   для: Sfinks   (02.11.2012 в 22:53)
 

1/goods CREATE TABLE `goods` (`id_goods` int(3) NOT NUL...
2.contents CREATE TABLE `contents` (
`id_check` int(9) DEFA...
3.gipermarket CREATE TABLE `gipermarket` (
`gipermarket_id` in...
4.goods gipermarket CREATE TABLE `goods gipermarket` (
`gipermarket_...
5.check CREATE TABLE `check` (
`gipermarket_id` int(2) D...

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 23:04)   письмо автору
 
   для: Виктория1   (02.11.2012 в 22:59)
 

Здрасьте.....
Там когда вы получаете табличку с надписью "CREATE TABLE `goods` (`id_goods` int(3) NOT NUL...", чуть выше есть надпись "Параметры". Нажмите на нее и "сокращенные тексты" переключите на "Полные тексты" и нажмите "OK"

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 23:08)   письмо автору
 
   для: Sfinks   (02.11.2012 в 23:04)
 

аааааааааааааааааааааааааааа
1.check CREATE TABLE `check` (
`gipermarket_id` int(2) DEFAULT NULL,
`check_id` int(9) DEFAULT NULL,
`Cost (rub)` float DEFAULT NULL,
`sells card` int(10) DEFAULT NULL,
`seller` char(25) DEFAULT NULL,
`data buy` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251
2.contents CREATE TABLE `contents` (
`id_check` int(9) DEFAULT NULL,
`group goods` char(30) DEFAULT NULL,
`name group goods` char(30) DEFAULT NULL,
`Cost(rub)` float DEFAULT NULL,
`sells card` int(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=cp1251
3.gipermarket CREATE TABLE `gipermarket` (
`gipermarket_id` int(11) NOT NULL DEFAULT '0',
`city` char(20) DEFAULT NULL,
`adress` char(30) DEFAULT NULL,
PRIMARY KEY (`gipermarket_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251
4.goods CREATE TABLE `goods` (
`id_goods` int(3) NOT NULL DEFAULT '0',
`name group` char(30) CHARACTER SET cp1251 DEFAULT NULL,
`goods` char(25) CHARACTER SET cp1251 DEFAULT NULL,
PRIMARY KEY (`id_goods`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
5.goods gipermarket CREATE TABLE `goods gipermarket` (
`gipermarket_id` int(2) DEFAULT NULL,
`name group goods` char(25) CHARACTER SET cp1251 DEFAULT NULL,
`goods` char(18) CHARACTER SET cp1251 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 22:39)   письмо автору
 
   для: Виктория1   (02.11.2012 в 19:52)
 

Проблема в том, что вы запросы не составляете, а пишете.... Как роман! Не как того требует синтаксис языка, а как бог на душу положит. Если уж человеки не могут понять, чего вы хотите от мускула, то ему уж это наверняка не по силам. У него нет воображения. он все делает четко по ИНСТРУКЦИЯМ. Почитайте... Хотя бы пункты 11, 12, 13.

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 22:43)   письмо автору
 
   для: Sfinks   (02.11.2012 в 22:39)
 

Обидно, что вы высмеиваете женский пол. я читаю.....

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 22:45)   письмо автору
 
   для: Виктория1   (02.11.2012 в 22:43)
 

Разница только в том, что если бы я говорил это ВАСЕ, то сказал бы:
- говоришь с мускулом, как с мужиками в гараже.
Так что не списывайте на пол =)

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 22:47)   письмо автору
 
   для: Sfinks   (02.11.2012 в 22:45)
 

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

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 22:58)   письмо автору
 
   для: Виктория1   (02.11.2012 в 22:47)
 

Опишите словами что должен делать запрос и на основании каких полей каких таблиц?
И опишите требуемые таблицы - какое поле что значит
И уж совсем было бы идеально увидеть по кусочку дампа каждой из интересующих таблиц.
Тогда я смогу помочь. Иначе - вся надежда на Игорька.

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 23:01)   письмо автору
 
   для: Sfinks   (02.11.2012 в 22:58)
 

Sfinks Я выполнила запрос относительно каждой таблицы, предоставила вам результаты запросов!!! Жду помощи

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 23:30)   письмо автору
 
   для: Виктория1   (02.11.2012 в 23:01)
 

Есть таблица разделов библиотеки:
/*<?*/
CREATE TABLE `razdels` (
  `
razdel_idint(11NOT NULL AUTO_INCREMENT,  /*это ID раздела*/
  
`razdel_nametinytext NOT NULL   /*это название раздела*/
ENGINE=MyISAM

И таблица книг:
/*<?*/
CREATE TABLE `books` (
  `
book_idint(11NOT NULL AUTO_INCREMENT,  /*это ID книги*/
  
`razdel_idint(11NOT NULL,     /*это внешний ключ (связь с таблицей разделов), определяет к какому разделу относится книга*/
  
`book_nametinytext NOT NULL,     /*это название книги*/
  
PRIMARY KEY (`id_position`)
ENGINE=MyISAM

Нужно выбрать по этим двум таблицам название раздела, в котором представлено больше всего книг.
------------------------------------------
Вот как минимум такое описание я должен увидеть, чтобы ответить
/*<?*/
SELECT (SELECT razdel_name FROM razdels WHERE razdel_id=t.razdel_id)nameco
FROM
SELECT razdel_idcount(*)co
      FROM books
      GROUP BY razdel_id
)t
HAVING co
=max(co)

------------------------------------------
А у вас, на сколько я понимаю, запрос будет еще посложнее.

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 23:39)   письмо автору
 
   для: Sfinks   (02.11.2012 в 23:30)
 

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

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 23:41)   письмо автору
 
   для: Виктория1   (02.11.2012 в 23:39)
 

я на слух не воспринимаю. Так что пишите =)

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 23:42)   письмо автору
 
   для: Sfinks   (02.11.2012 в 23:41)
 

я не про слух))) icq например)))

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 23:44)   письмо автору
 
   для: Виктория1   (02.11.2012 в 23:42)
 

У вас имеются какие-то тайные сведения? =) Пишите тут - может еще кому пригодится.

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 23:43)   письмо автору
 
   для: Виктория1   (02.11.2012 в 23:39)
 

И, честно говоря, что-то мне подсказывает, что бОльшая часть того, что вы разрабатывали 2 недели, разработана не правильно.
Т.е. с эти может и можно работать, но крайне сложно и непродуктивно.

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 23:40)   письмо автору
 
   для: Sfinks   (02.11.2012 в 23:30)
 

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

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 23:41)   письмо автору
 
   для: Sfinks   (02.11.2012 в 23:40)
 

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

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 23:47)   письмо автору
 
   для: Виктория1   (02.11.2012 в 23:41)
 

> чувствую вся моя работа насмарку
Что сказать....
Когда не знаешь куда идти, намного проще начать спрашивать в самом начале пути и на каждом углу уточнять дорогу, чем забрести в чащу леса и искать там егеря, который выведет вас на Тверскую =)

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 23:50)   письмо автору
 
   для: Sfinks   (02.11.2012 в 23:47)
 

я писала сюда, но никто совсем не отвечал.. я отчаилась и начала сама делать.. а вот сегодня прям мне начали отвечать, и я стала уточнять все то в чем сомневалась.
Вы с юморок Sfinks

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 23:53)   письмо автору
 
   для: Sfinks   (02.11.2012 в 23:47)
 

Да я пишу, мне не сложно))) Просто неудобно.
Не сомневаюсь, что будет неудобно, она сама не нравится мне..
Надеюсь с вашей помощью можно будет что то переделать)
Вы же мне поможете?)

  Ответить  
 
 автор: Виктория1   (02.11.2012 в 23:49)   письмо автору
 
   для: Sfinks   (02.11.2012 в 23:40)
 

Имеется 5 таблиц.
1. gipermarket (описываются филлиалы магазинов)
Id магазина | адрес | город |

2. goods (здесь база всех продуктов сети)
Id_goods | Name group goods | goods

3.goods gipermarket (хранятся товары каждого филиала)

Gipermarket_id | Name group goods | goods

4.check (список всех чеков каждого филиала)
Gipermarket_id | check_id | cost(rub) | seller card | seller | date buy|

5. contents ( состав каждого чека)

Id_check | Group goods| | name group goods | cost(rub) | Sells card

  Ответить  
 
 автор: Sfinks   (02.11.2012 в 23:59)   письмо автору
 
   для: Виктория1   (02.11.2012 в 23:49)
 

Ваш вопрос:
"Для каждого покупателя и для каждой группы определить наиболее предпочитаемые им виды товаров"

В вопросе - "для каждой группы определить" - группы чего? товаров? покупателей? Еще чего-то?

В перечисленных таблицах:
- Что есть покупатель? чем он идентифицируется?
- Что есть группы?
- Что есть "виды товаров"?
- по каким полям таблицы связаны между собой?

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 00:01)   письмо автору
 
   для: Sfinks   (02.11.2012 в 23:59)
 

1.Покупатель идентифицируется seller card
2. группы это - бытовая химия,табак и тб.
3.виды как я понимаю это группы с определнными товарами внутри них

таблица gipermarket ключ id_gipermarket
а остальные я не знаю что делаь... имеются повторения

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 00:08)   письмо автору
 
   для: Виктория1   (03.11.2012 в 00:01)
 

но я не вижу таблицы групп товаров.

- Идентификатор группы это Group goods или name group goods?
- наиболее предпочитаемые это наибольшее количество купленных или как? Я например предпочитаю виски, но покупаю кефир =)
- идентификатор "виды товаров" это что? goods?

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 00:11)   письмо автору
 
   для: Sfinks   (03.11.2012 в 00:08)
 

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

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 00:10)   письмо автору
 
   для: Виктория1   (03.11.2012 в 00:01)
 

А это вообще что? на этом кто-то будет работать? или что-то вроде курсовой? Или что?

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 00:12)   письмо автору
 
   для: Sfinks   (03.11.2012 в 00:10)
 

работа к зачету

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 00:25)   письмо автору
 
   для: Виктория1   (03.11.2012 в 00:12)
 

Ну день рождения кончился?
Можно теперь плохие новости: =)
В таком виде вы его не сдадите!
Сейчас попробую изобразить вам правильную и понятную структуру таблиц.

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 00:26)   письмо автору
 
   для: Sfinks   (03.11.2012 в 00:25)
 

жду.. а то засыпаю

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 00:46)   письмо автору
 
   для: Sfinks   (03.11.2012 в 00:25)
 

таблица gipermarket (ключ gipermarket_id):
gipermarket_id | gipermarket_city | gipermarket_adress
1              | москва           | улица1, д1
2              | москва           | улица2, д1
3              | питер            | улица3, д1

таблица group_goods (ключ group_goods_id):
group_goods_id | group_goods_name
1              | сыры
2              | колбасы
3              | молоко

таблица goods (ключ goods_id):
goods_id | group_goods_id | goods_name
1        | 1              | Российский
2        | 1              | Гауда
3        | 2              | Молочная
4        | 3              | вкуснотеево
5        | 3              | простоквашино

таблица gipermarket_goods (ключ составной из обоих полей):
gipermarket_id | goods_id
1              | 1
1              | 2
1              | 4
1              | 5
2              | 3
2              | 5
3              | 2
3              | 3
3              | 4

таблица sellers (ключ seller_id)
seller_id | seller_name
1         | вася
2         | маша     
3         | толя

таблица чеков invoice (ключ invoice_id):
invoice_id | gipermarket_id | seller_id | goods_id | invoice_date        | invoice_price
1          | 1              | 1         | 2        | 2012-09-20 20:00:00 | 100.00
2          | 1              | 1         | 3        | 2012-09-20 20:00:03 | 120.00
3          | 1              | 2         | 2        | 2012-09-21 21:05:05 | 100.00
4          | 1              | 2         | 4        | 2012-09-21 21:05:07 | 200.00
5          | 2              | 3         | 1        | 2012-09-22 22:10:11 | 180.00
6          | 2              | 3         | 3        | 2012-09-22 22:10:14 | 120.00
7          | 2              | 3         | 5        | 2012-09-22 22:10:16 | 220.00

Как-то так. При чем я сделал как у вас было, но по идее должна быть еще общая текущая цена в таблице goods +наценка от общей цены для каждого гипермаркета, либо просто цена в таблице gipermarket_goods. Иначе откуда ее брать для печати чеков?....

Подумайте о том, чтобы переделать вашу базу.
Что можно с вашим вариантом сделать я не знаю =(

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 00:50)   письмо автору
 
   для: Sfinks   (03.11.2012 в 00:46)
 

Вы завтра здесь во сколько будете? я сейчас уже непотяну делать, голова гудит, а еще завтра в 6 вставать..
Спасибо огромное за помощь!! Я думала кстати над такой схемой, но подумала, что может не стоит так подробно ее делать...

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 01:04)   письмо автору
 
   для: Виктория1   (03.11.2012 в 00:50)
 

Кстати, если прикрутить цену к gipermarket_goods, то ее можно обозвать price:
таблица price (ключ составной из gipermarket_id и goods_id):
gipermarket_id | goods_id | price_list
1              | 1        | 100.00
1              | 2        | 120.00
1              | 4        | 140.00
1              | 5        | 160.00
2              | 3        | 300.00
2              | 5        | 162.00
3              | 2        | 124.00
3              | 3        | 310.00
3              | 4        | 145.00

> Вы завтра здесь во сколько будете
переодически заглядываю. Точней не знаю.

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 01:08)   письмо автору
 
   для: Sfinks   (03.11.2012 в 01:04)
 

Надеюсь завтра разобраться с запросами. Можете скинуь ссылочки по запросам? еще на свежую голову почитаю то. что вы присылали
что значит составной ключ? и 1 столбец и 2 является ключом??и как это записать? так же primary key?

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 01:52)   письмо автору
 
   для: Виктория1   (03.11.2012 в 01:08)
 

Значит, что в таблице price значения полей gipermarket_id и goods_id по отдельности могут дублироваться, но нет ни одной пары строк, в которых бы совпадали оба этих поля. Эти уникальные пары (gipermarket_id + goods_id) будут проиндексированы и поиск по ним будет производиться исключительно быстро.

Записать так:
ALTER TABLE price ADD PRIMARY KEY( gipermarket_id, goods_id )

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 11:00)   письмо автору
 
   для: Sfinks   (03.11.2012 в 01:52)
 

О спасибо большое!!! Проснулась,а голова гудит, наверно это рма черес чур было вчера)

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 12:12)   письмо автору
 
   для: Sfinks   (03.11.2012 в 01:52)
 

ааааааа Sfinks..... ну где же вы???
у меня вопрос по последней таблице.... как состав чека то делать? или его не нужно делать?

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 13:27)   письмо автору
 
   для: Виктория1   (03.11.2012 в 12:12)
 

А зачем он?
Ну если конечно в дальнейшем нужно будет делать выборки по отдельным чекам, то можно либо в таблицу invoice после gipermarket_id добавить invoice_num (это проще, но будет денормализация).

Либо оставить в таблице invoice (ключ invoice_id):
invoice_id | gipermarket_id | seller_id 
1          | 1              | 1         
2          | 1              | 2
3          | 1              | 1         
4          | 2              | 3 

И добавить таблицу prodazhi (ключ prodazhi_id)
prodazhi_id | invoice_id | goods_id | prodazhi_date       | prodazhi_summ
1           | 1          | 2        | 2012-09-20 20:00:00 | 100.00
2           | 1          | 3        | 2012-09-20 20:00:03 | 120.00
3           | 2          | 2        | 2012-09-21 21:05:05 | 100.00
4           | 2          | 4        | 2012-09-21 21:05:07 | 200.00
5           | 3          | 1        | 2012-09-22 22:10:11 | 180.00
6           | 3          | 3        | 2012-09-22 22:10:14 | 120.00
7           | 4          | 5        | 2012-09-22 22:10:16 | 220.00

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 13:31)   письмо автору
 
   для: Sfinks   (03.11.2012 в 13:27)
 

а prodazhi_id это как понимать и как в это таблице можно увидеть состав чека?
Зайдите пожалуйста в аську..яя вас добавила.

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 14:42)   письмо автору
 
   для: Виктория1   (03.11.2012 в 13:31)
 

prodazhi_id - это суррогатный ключ. Просто - вдруг пригодится.

Состав чека:
SELECT *
FROM invoice
JOIN prodazhi USING( invoice_id )
JOIN goods USING( goods_id )
WHERE invoice_id=126


У меня не установлена аська.

Кстати, вы в письме текст писали? Мне пришло письмо с абракадаброй вместо темы и без текста.

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 14:44)   письмо автору
 
   для: Sfinks   (03.11.2012 в 14:42)
 

Смотрите я сделала все таблицы. но вот по поводу состава чека думаю можно сделать.
cheque_id | contents | cost_cheque


как думаете? а в таблице cheque поставить просто общую сумму.
Да, писала наверно..
Без вас как без рук!!!!!!

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 15:04)   письмо автору
 
   для: Виктория1   (03.11.2012 в 14:44)
 

А contents это что такое?
Если список покупок через запятую, то это не правильно.
Если это связь по ключу с другой таблицей, то такие поля лучше одинаково называть.

> Без вас как без рук
Но к сожалению сейчас я до самого вечера буду занят =(

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 15:11)   письмо автору
 
   для: Sfinks   (03.11.2012 в 15:04)
 

ой....... как же я буду то??? мне еще 3 запроса надо....
contents это состав чека. к примеру
номер чека товары
1 2
1 4
и так далеее...
только что будет ключом не знаю..

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 18:53)   письмо автору
 
   для: Виктория1   (03.11.2012 в 15:11)
 

Опять вы какую-то ерунду придумываете. Чем не устраивает предложенный мной вариант?

Какие 3 запроса? Опишите словами.

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 18:55)   письмо автору
 
   для: Sfinks   (03.11.2012 в 18:53)
 

Куда пропало ваше вчерашнее настроение?
я немного не понимаю как реализовать ту таблицу которую вы предлагает сделать...
а запросы...
Вычислить среднее количество позиций в чеке.
Select cheque_id,count(goods_id) from `cheque_contents`
Group by cheque_id
это всего позиций,а как среднее не понимаю, думала вложенны,а как его делать хз..
Для каждого покупателя и для каждой группы определить наиболее предпочитаемые им виды товаров.

а это вообще для меня сумерки

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 19:35)   письмо автору
 
   для: Виктория1   (03.11.2012 в 18:55)
 

> Куда пропало ваше вчерашнее настроение?
Дел много. Спешу =)
-------------------
Таблица invoice (чек, счет, счет-фактура):
invoice_id -ключ.
gipermarket_id -внешний ключ, указывающий в каком магазине выбит чек.
seller_id -внешний ключ, указывающий кто покупатель.
-------------------
Таблица prodazhi:
prodazhi_id -ключ (уникальный идентификатор каждой проданной еденицы товара)
invoice_id -внешний ключ, указывающий к какому чеку относится данная конкретная проджажа
goods_id -внешний ключ, указывающий, какой товар продан
prodazhi_date -дата продажи (тип поля DATETIME или TIMESTAMP)
prodazhi_summ -цена, по которой продан товар
-------------------
По моему прозрачнее некуда. Возможно с переводом некоторые проблемы только.
-------------------
Вы в своем запросе снова пишете поля, которых в моих таблицах не было.
В результате я ниче не понимаю
Я вам покажу на примере своих таблиц
-------------------
1. Вычислить среднее количество позиций в чеке.
SELECT avg(co)
FROM( SELECT count(*)co 
      FROM prodazhi 
      GROUP BY invoice_id 
)t

2. Для каждого покупателя определить наиболее предпочитаемые им виды товаров.
SELECT (SELECT seller_name FROM sellers WHERE seller_id=t1.seller_id)
     , (SELECT goods_name FROM goods WHERE goods_id=t1.goods_id)
FROM( SELECT seller_id, goods_id, count(*)co
      FROM invoice i
      JOIN prodazhi USING( invoice_id )
      GROUP BY seller_id, goods_id
)t1
JOIN( SELECT seller_id, max(co)mx
      FROM( SELECT seller_id, count(*)co
            FROM invoice i
            JOIN prodazhi USING( invoice_id )
            GROUP BY seller_id, goods_id
      }t
      GROUP BY seller_id
)t2
ON t1.seller_id=t2.seller_id AND co=mx

3. для каждой группы....
Не понял. Что для групп нужно определить? У нас есть только группы товаров. Они ничего не предпочитают.

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 19:47)   письмо автору
 
   для: Sfinks   (03.11.2012 в 19:35)
 

Уважаемый, Sfinks мне не знакомы операторы,которые вы используете в своих запросах.. Постараюсь сама разобраться что каждый означает, чтобы не отвлекать вас.

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 22:49)   письмо автору
 
   для: Виктория1   (03.11.2012 в 19:47)
 

Все это синтаксис оператора SELECT с подзапросами, кроме нескольких функций:
- count(*) -количество строк в группе
- max(field) -максимальное значение поля field в группе
- avg(field) -среднее значение поля field в группе

В зависимости от того сколько у вас есть времени, советую начать решать задачки обучающего этапа на сайте http://sql-ex.ru.
Там в каждой задачке есть ссылки на описание операторов, рекомендованных для решения данной конкретной задачи.

Просто я не знаю как вам помочь по другому. 1 - решить за вас. Вроде я не против, но вы похоже хотите понять, а не тупо сдать. Это радует. Поэтому советую учиться постепенно, а не "с корабля на бал". Но это займет какое-то время.

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 22:50)   письмо автору
 
   для: Sfinks   (03.11.2012 в 22:49)
 

Помогите с экспортом... Прошу......
Вы правы я очень сильно хочу понять, оценка не так сильно важна. главное чтоб было в голове..

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 22:55)   письмо автору
 
   для: Виктория1   (03.11.2012 в 22:50)
 

Тогда шагайте на указанный сайт и читайте, вникайте, решайте..... До полного просветления =)
При чем описание там на русском.

  Ответить  
 
 автор: Виктория1   (03.11.2012 в 22:40)   письмо автору
 
   для: Sfinks   (03.11.2012 в 19:35)
 

Sfinks, только вы можете меня спасти!!
Как экспортировать бд?
Я нажимала-экспорт и ок. и при импорте выдает оошибку. что не обнаружено бд

  Ответить  
 
 автор: Sfinks   (03.11.2012 в 22:53)   письмо автору
 
   для: Виктория1   (03.11.2012 в 22:40)
 

Если речь о PhpMyAdmin, то чтобы экспортировать базу целиком, нужно сперва из нее выйти. Т.е. в верхней строчке перейти по ссылке "localhost" и уже там нажать экспорт. Затем в экспорте переключить "Способ экспорта" с быстрого на обычный и в списке доступных баз выбрать требуемую. Остальные настройки вам не особо нужны, поэтому отмотайте вниз и нажмите ОК.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования