Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос из двух таблиц 
V
    Опции темы
StachelDraht
Дата 31.1.2011, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



Привет!
Помогите пожалуйста составить запрос.
Имеем 2 таблицы:
1 таблица devices хранит в себе наименования девайсов и прочую лабуду, все поля приводить не буду
поля:id, type, serial, info 

2 таблица locations хранит в себе места нахождения девайсов
поля: id, serial, location

В результате запрос должен выводить все девайсы и показывать их location, но так как у каждого девайса может быть неограниченное количество location требуется вывести только тот location у которого id больше, т.е. тот который был добавлен последним.

На данный момент один и тот же девайс выводится столько раз, сколько для него есть location.

Надеюсь понятно изложил свою мысль.

Большое спасибо
PM MAIL   Вверх
solenko
Дата 31.1.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



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



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 31.1.2011, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



а в чём проблема? один запрос к девайсам, получили их идентификаторы, сложили в одну строку и вторым запросом получаем все локейшены
PM MAIL WWW   Вверх
StachelDraht
Дата 31.1.2011, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



solenko, не понял... пока таблиц только две

bars80080, спасибо, но как будет выглядеть второй запрос

всем спасибо за ответы
PM MAIL   Вверх
solenko
Дата 31.1.2011, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



Цитата(StachelDraht @  31.1.2011,  20:10 Найти цитируемый пост)
solenko, не понял... пока таблиц только две

Обычно вашу задачу решают с помощью отношения многие ко многим с приблизительно такий структурой таблиц (а псевдо-sql):
Код

CREATE TABLE devices (
  id int,
  some_other_info
);

CREATE TABLE locations (
  id int,
  some_other_info
);

CREATE TABLE device_locations (
  id int,
  device_id int,
  location_id int,
  created TIMESTAMP,
  state  int
);

Ну и с этом случае полагаются либо на created, либо на state (true для активного location и false для всех остальных)



Это сообщение отредактировал(а) solenko - 31.1.2011, 21:18


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
StachelDraht
Дата 31.1.2011, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



все равно не совсем понимаю, т.е. в третью таблицу надо вносить данные тогда же когда и в первые две. Допустим полагаться будем на поле state, как мне узнать реально текущий локейшн. Или state надо всегда обновлять при изменении локейшена.


Спасибо еще раз.
PM MAIL   Вверх
ksnk
Дата 1.2.2011, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Код

select xxx1.*, xxx2.* 
from xxx1 left join xxx2 on xxx1.serial=xxx2.serial 
where xxx2.id in (SELECT max(id) as id from xxx2 group by serial);

то еще извращение...

Таблицы маленькие или большие? Индексы где-нибудь есть?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
solenko
Дата 1.2.2011, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



ну или еще вот такие извраты есть. На практике, кстати, оказывается самым быстрым запрос с объединением id и location в одно текстовое поле, группировка по  device и выбор максимального этого поля.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
StachelDraht
Дата 1.2.2011, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



ksnk, спасибо, работает!!!

Всем большое спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0734 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.