Новости | Документация | Download | Webboard | FAQ | Поиск | Контакты

Apache.RU - Webboard



Вернуться
Запрос из нескольких связанных таблиц (Elena) 26/06 - 14:34:46
      Re: Запрос из нескольких связанных таблиц (Евгений) 29/06 - 15:22:50
      Re: Запрос из нескольких связанных таблиц (Elena) 29/06 - 16:33:13
      Re: Запрос из нескольких связанных таблиц (Elena) 29/06 - 16:35:52
      Re: Запрос из нескольких связанных таблиц (Dinky) 29/06 - 22:58:27
      Re: Запрос из нескольких связанных таблиц (Евгений) 01/07 - 11:21:48
      Re: Запрос из нескольких связанных таблиц (Dinky) 02/07 - 20:11:16

> Original message text:
> From: > Elena - 26/06 - 14:34:46
> Subject:Запрос из нескольких связанных таблиц
> -----------------
> Помогите пожалуйста составить такой вот запрос:
> Есть четыре таблицы:
> 1) students - Имена студентов-ботаников и их личные данные, например:
> +------+---------+-------+
> | id | surnane | name |
> +------+---------+-------+
> | 1 | Petrov | Alex |
> | 2 | Sidorov | Petr |
> | 3 | Ivanov | Vasyl |
> +------+---------+-------+
> 2) praktics - Данные о выездах их на практику, например:
> +------+-----------+----------+------------+------------+
> | id | flower_id | place_id | date_begin | date_end |
> +------+-----------+----------+------------+------------+
> | 1 | 2 | 3 | 2004-06-01 | 2004-06-03 |
> | 1 | 1 | 3 | 2004-06-03 | 2004-06-05 |
> | 2 | 3 | 1 | 2004-06-01 | 2004-06-05 |
> +------+-----------+----------+------------+------------+
> Это значит, что студент №1 (т.е. Петров) изучал растение №2 в местности №3 с 01.06.2004 по 03.06.2004. и т.д.
> 3) flowers - таблица с названиями растений, например:
> +-----------+----------+
> | flower_id | flower |
> +-----------+----------+
> | 1 | Krasavka |
> | 2 | Kaktus |
> | 3 | Lopuh |
> +-----------+----------+
> 4) place - названия местностей, например:
> +----------+-----------------------+
> | place_id | place |
> +----------+-----------------------+
> | 1 | Karabi yayla |
> | 2 | Dolgorukovskaya yayla |
> | 3 | Nikitskaya yayla |
> +----------+-----------------------+
> _________________________________________________
> Теперь вопрос, как мне выбрать фамилии студентов, которые изучали Lopuh на Karabi yayla.
> Я могу сделать такой запрос:
> SELECT DISTINCT surname, name FROM students
> LEFT JOIN praktics USING (id)
> WHERE flower_id=3 AND place_id=1;
>
> Но как мне сделать запрос, чтобы можно было прямо писать
> ... WHERE flower='Lopuh' AND place LIKE 'Karabi%';
> ?
>


From: Elena - 29/06 - 16:33:13
Subject:Запрос из нескольких связанных таблиц
-----------------
>1)Поставьте в вторую таблицу первым столбцом новое автоинсрементное поле обязательно.
ЗАЧЕМ?! почему ОБЯЗАТЕЛЬНО? Кому обязательно? Вам?

Сейчас я запрос сделала так:
SELECT STRAIGHT_JOIN DISTINCT surname, name
FROM place, flowers, praktics, students
WHERE flowers.flower='Lopuh' AND place.place LIKE 'Karabi%'
AND flowers.flower_id=praktics.flower_id
AND place.place_id=praktics.place_id
AND students.id=praktics.id;

EXPLAIN выдает следующий результат:
+--------+------+-------+-----------+----+-----------------------------------------+
│table │type │key_len│ref │rows│Extra │
+--------+------+-------+-----------+----+-----------------------------------------+
│place │range │31 │ │1 │Using where; Using index; Using temporary│
│flowers │ref │21 │const │1 │Using where; Using index │
│praktics│index │17 │ │3 │Using where; Using index │
│students│eq_ref│4 │praktics.id│1 │ │
+--------+------+-------+-----------+----+-----------------------------------------+

Вроде нормально получилось?


[Это сообщение - спам!]

Последние сообщения из форума

 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
15833




  Copyright Apache.ru © 1999-2017, All Rights Reserved Разработка сайта: Inside.ru  
  РЕКЛАМА НА САЙТЕ: |