Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Запросы к базе
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Запросы к базе

Страниц (1): [1]
 

1. vlom - 03 Августа, 2011 - 21:23:32 - перейти к сообщению
Уже как рыба головой об лед - не могу написать запросы и все
Помогите кому не в тягость пожалуйста
есть четыре вот такие таблички
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `db`.`customers` (
  2. `id` INT NOT NULL AUTO_INCREMENT ,
  3. `name` VARCHAR(45) NULL ,
  4. PRIMARY KEY (`id`) )
  5. ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;
  6.  
  7. CREATE TABLE `db`.`orders` (
  8. `id` INT NOT NULL AUTO_INCREMENT ,
  9. `customer_id` INT NULL ,
  10. PRIMARY KEY (`id`) )
  11. ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;
  12.  
  13. CREATE TABLE `db`.`products` (
  14. `id` INT NOT NULL AUTO_INCREMENT ,
  15. `title` VARCHAR(255) NULL ,
  16. PRIMARY KEY (`id`) )
  17. ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;
  18.  
  19. CREATE TABLE `db`.`order_product_rel` (
  20. `id` INT NOT NULL AUTO_INCREMENT ,
  21. `order_id` INT NULL ,
  22. `amount` INT NULL ,
  23. PRIMARY KEY (`id`) )
  24. ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;


необходимо вывести вот такие запросы
1) Написать SQL запрос для получения списка всех клиентов и количества заказов, сделанных каждым клиентом (у некоторых клиентов может не быть заказов).
2) Написать SQL запрос для получения уникальных наименований товаров, которые ни разу не были заказаны клиентами.
3) Вывести имена клиентов, сделавших более 5-ти заказов.
2. EuGen - 03 Августа, 2011 - 21:31:46 - перейти к сообщению
1.
SELECT COUNT(*) AS orders_count, customers.name FROM orders LEFT JOIN customers ON orders.customer_id=customers.id GROUP BY orders.customer_id
2.
Запрос не возможен, так как неверно построена связка (в таблице-связке нет идентификатора продукта)
3.
SELECT COUNT(*) AS orders_count, customers.name FROM orders LEFT JOIN customers ON orders.customer_id=customers.id GROUP BY orders.customer_id HAVING orders_count>5
3. vlom - 03 Августа, 2011 - 21:48:44 - перейти к сообщению
EuGen оба запроса выводят ошибку
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 '*' at line 1
так же MySQL Workbench подсвечивает '*' как синтаксическую ошибку
если * зять в обратные кавычки то такая ошбка
Unknown column 'orders.*' in 'field list'
4. EuGen - 03 Августа, 2011 - 22:12:38 - перейти к сообщению
Занятно, в агрегирующих функциях и не разрешено таблица.* ? Пока исправлю на *, но уверен, что в 5.1 это разрешено, проверю.
5. vlom - 03 Августа, 2011 - 22:19:36 - перейти к сообщению
EuGen блин спасибо тебе огромное
такой вопрос, подскажи какую нибудь хорошую литературу по MySQL
только чтобы не слишком нудно как в оф мануале, но также подробно)))
(Добавление)
и к стати у меня Версия сервера: 5.1.53-community
(Добавление)
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE  TABLE `insis`.`order_product_rel` (
  3.     `order_id` INT NOT NULL,
  4.     `product_id` INT NULL ,
  5.     `amount` INT NULL)
  6. ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;
  7.  


последний запрос на создание таблицы я не правильно написал)))))
(Добавление)
для второго задания попытался сам написать запрос но что-то не так
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `order_product_rel`.`*`, COUNT(`products`.`id`)
  2. FROM `insis`.`order_product_rel`
  3. LEFT JOIN `order_product_rel`
  4. ON (`order_product_rel`.`product_id`=`products`.`id`)
  5. GROUP BY `order_product_rel`.`product_id`;

где ошибка???
(Добавление)
ща вот так переделал
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `products`.*, COUNT(`order_product_rel`.`product_id`)
  2. FROM `insis`.`products`
  3. LEFT JOIN `order_product_rel`
  4. ON (`order_product_rel`.`product_id`=`products`.`id`)
  5. GROUP BY `order_product_rel`.`product_id`;

выводит, но не то что мне надо
6. Arni - 03 Августа, 2011 - 23:24:20 - перейти к сообщению
Если у вас windows, поставьте себе http://www[dot]devart[dot]com/ru/dbforge/mysql/studio/ и не мучайте людей глупыми вопросами. dbforge подчеркивает места с ошибками, я один раз чуть сума не сошол, если бы не она то точно бы двинулся. Взял пример запроса с сайта, часа 2 ломал голову в чем дело, оказалось в примере вместо знака (- минус) ( - тере) вставили.
7. vlom - 03 Августа, 2011 - 23:26:58 - перейти к сообщению
испльзую MySQL Workbench, тоже как бы синтаксические ошибки подсвечивает
8. EuGen - 04 Августа, 2011 - 21:28:21 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT products.title FROM products LEFT JOIN order_products_rel ON products.id=order_products_rel.product_id WHERE order_products_rel.id IS NULL

 

Powered by ExBB FM 1.0 RC1