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

Форум MySQL

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

 

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

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

тема: Запрос к таблице
 
 автор: fox2011   (28.02.2012 в 16:42)   письмо автору
 
 

Имеем таблицу:

CREATE TABLE `Manufacturers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
+----+--------------------+
| id | name |
+----+--------------------+
| 1 | CDEF Manufacturing |
| 2 | Dell Ltd |
| 3 | JDF Ltd |
| 4 | Motor inc |
+----+--------------------+
CREATE TABLE `parts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`man_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
+----+-----------------+--------+
| id | name | man_id |
+----+-----------------+--------+
| 1 | DVD burner | 1 |
| 2 | Laptop | 2 |
| 3 | Power supply | 2 |
| 4 | Display adapter | 3 |
| 5 | Network hub | 1 |
| 6 | Sound card | 3 |
+----+-----------------+--------+

необходимо извлечь идентификаторы, имена изготовителей и соответствующих частей для DELL LTD, JDF LTD?

select
p.name,m.name
from
Manufacturers m, parts p
where
1=1
and m.id=p.man_id

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

  Ответить  
 
 автор: Valick   (28.02.2012 в 17:14)   письмо автору
 
   для: fox2011   (28.02.2012 в 16:42)
 

SELECT p.name,m.name
    FROM parts p
     JOIN Manufacturers m
          ON m.id=p.man_id
    WHERE m.id IN (2,3)


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

а если нормально проектировать таблицы и сделать поля связи с одинаковыми именами,
то будет еще красивее
SELECT p_name,m_name
    FROM parts
     JOIN Manufacturers
          USING(man_id)
    WHERE man_id IN (2,3)

(можете даже подумать какие поля нужно переименовать, чтобы запрос заработал)

___
зачем вам where 1=1 ? :)

  Ответить  
 
 автор: fox2011   (28.02.2012 в 19:21)   письмо автору
 
   для: Valick   (28.02.2012 в 17:14)
 

Так, какой из этих запросов более верный?

и ещё помогите пжлста со следующими запросами(с той же таблицей):

- Извлеките имена и идентификаторы изготовителей, составляющие части, которых, не указаны.

SELECT
*
FROM
Manufacturers
WHERE
id NOT IN (SELECT
DISTINCT man_id
FROM parts)


- Измените идентификатор для CDEF, MAnufacturing с 1 на 5 и идентификаторы составляющих частей, которые соответствуют этому изготовителю (одним запросом).

UPDATE
Manufacturers
SET
id = 5
WHERE
id = 1

- Переместите вход JDF Ltd и соответственные составляющие части (одним запросом)

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

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