SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 29.08.2011 03:56:40

kostasoft
Участник
Зарегистрирован: 23.08.2011
Сообщений: 9

Очень сложный запрос из трех таблиц

Есть три таблицы:
1. user_table (таблица пользователей)
В ней три поля:
- id (идентификатор пользователя, ключевое поле, автоинкремент)
- login (имя пользователя)
- pass (пароль)

2. comp_table (таблица компьютеров)
В ней несколько полей, два из них важные:
- hwid (идентификатор компьютера - Hardware ID, уникальное поле)
- user_id (принадлежность этого компьютера пользователю из первой таблицы).
У одного и того же пользователя могут быть несколько компьютеров.

3. stat_table (основная таблица, куда ежедневно заносятся данные от компьютеров из второй таблицы).
В ней несколько полей, из них можно выделить особо:
- hwid (идентификатор компьютера из второй таблицы)
- count (какое-то вычисляемое поле)
- cur_date (дата получения данных)

В начале работы каждый пользователь авторизуется. Если он есть в первой таблице, он продолжает работать и ему присваивается id из первого поля первой таблицы.
Нужно сделать выборку по третьей таблице, но только для тех компьютеров, для которых идентификатор (hwid) соответствует id пользователя (из второй таблицы), т.е. пользователь может просмотреть данные только от своих компьютеров.

Как правильно сформировать запрос? SELECT cur_date, count FROM stat_table, comp_table  WHERE hwid = ???

Неактивен

 

#2 29.08.2011 11:35:02

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Очень сложный запрос из трех таблиц

SELECT
T3.`cur_date`,
T3.`count`
FROM
stat_table AS T2
INNER JOIN
comp_table AS T3  
USING(hwid)
WHERE
T2.user_id = [пользователь]
 

Отредактированно vaspet (29.08.2011 11:36:17)

Неактивен

 

#3 29.08.2011 13:06:11

kostasoft
Участник
Зарегистрирован: 23.08.2011
Сообщений: 9

Re: Очень сложный запрос из трех таблиц

Спасибо!
А я сделал так:
$query = "SELECT * FROM `stat_table` WHERE `hwid` IN (SELECT `hwid` FROM `comp_table` WHERE `user_id`=" . $userid . ")";
где $userid уже полученный id пользователя из первой таблицы.
Мой вариант тоже работает, но подскажите, какой будет быстрее? (пока таблицы маленькие, оценить сложно)

Отредактированно kostasoft (29.08.2011 13:08:11)

Неактивен

 

#4 29.08.2011 13:16:38

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Очень сложный запрос из трех таблиц

Неактивен

 

#5 02.09.2011 17:56:32

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Очень сложный запрос из трех таблиц

Вот ещё похожий случай
http://sqlinfo.ru/forum/viewtopic.php?id=4623

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson