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

Форум MySQL

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

 

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

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

тема: Объединение таблиц
 
 автор: serg_b   (23.11.2011 в 13:44)   письмо автору
 
 

У меня есть 2 таблицы:
Таблица с товарами:

CREATE TABLE `tovar` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nazvanie` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3;
INSERT INTO `tovar` VALUES (1,'Televizor');
INSERT INTO `tovar` VALUES (2,'Telefon');

и таблица с рейтингом:

CREATE TABLE `reiting` (
  `id` int(11) NOT NULL DEFAULT '0',
  `kolvo` int(11) DEFAULT NULL,
  `total` int(11) DEFAULT NULL
) ENGINE=MyISAM;
INSERT INTO `reiting` VALUES (1,2,8);

Нужно создать такой запрос, чтобы он выводил ВСЕ товары с рейтингом, мой запрос:

SELECT tovar.*, reiting.* FROM tovar, reiting WHERE tovar.id = reiting.id;

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

  Ответить  
 
 автор: cheops   (23.11.2011 в 14:03)   письмо автору
 
   для: serg_b   (23.11.2011 в 13:44)
 

Вместо запятой в FROM между именами таблиц, используйте LEFT JOIN, кстати WHERE в этом случае лучше заменить на ON - тогда у вас условие будет срабатывать в момент объединения таблиц, вместо того, чтобы отбирать данные при помощи WHERE после того, как две таблицы объединены в большую мега-таблицу.

  Ответить  
 
 автор: serg_b   (23.11.2011 в 14:25)   письмо автору
 
   для: cheops   (23.11.2011 в 14:03)
 

Можете код запроса написать если несложно

  Ответить  
 
 автор: cheops   (23.11.2011 в 14:27)   письмо автору
 
   для: serg_b   (23.11.2011 в 14:25)
 

Имеется в виду вот что
SELECT
  tovar.*,
  reiting.*
FROM
  tovar
LEFT JOIN
  reiting
ON
  tovar.id = reiting.id;

  Ответить  
 
 автор: serg_b   (23.11.2011 в 14:42)   письмо автору
 
   для: cheops   (23.11.2011 в 14:27)
 

Спасибо Cheops! А подскажи пожалуйста как сделать чтобы выводилась такая таблица:
1 столбец - название товара
2 столбец - его рейтинг (столбец total деленное на столбец kolvo)

Заранее спасибо!

  Ответить  
 
 автор: cheops   (23.11.2011 в 15:06)   письмо автору
 
   для: serg_b   (23.11.2011 в 14:42)
 

Можно поступить следующим образом
SELECT 
  tovar.nazvanie AS nazvanie, 
  reiting.total / reiting.kolvo AS total
FROM 
  tovar 
LEFT JOIN 
  reiting 
ON 
  tovar.id = reiting.id;

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

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