SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 28.05.2008 20:55:37

Cresh
Участник
Зарегистрирован: 28.05.2008
Сообщений: 4

Помогите написать SQL запрос

Сам запрос очень большой и собирает инфу с 7 таблиц, и все вроде ничего но вот восьмая таблица никуда не лезет
вобщем упрощу задачу и сведу её к 2м таблицам
1я obj поле одно Id int(11);
2я lok поля oid int(11) , uid(11);

Данные:
obj:                lok:
Id                   oid    uid
1                    3       1
2                    2       1
3                    1       1
4
5
6

поля Id и oid говорят об объекте, uid о пользователе
Нужны все Id которых нет в lok.

Мой код:
SELECT obj.Id, lok.uid, lok.oid from obj, lok WHERE lok.uid = 1 AND
obj.Id != lok.oid

но я явно протупил ))
Подскажите плиз.

Отредактированно Cresh (28.05.2008 20:56:29)

Неактивен

 

#2 28.05.2008 21:02:20

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

Re: Помогите написать SQL запрос


SELECT Id FROM obj left join lok on id=oid where oid is null;
 

Отредактированно vasya (28.05.2008 21:11:15)

Неактивен

 

#3 28.05.2008 22:06:33

Cresh
Участник
Зарегистрирован: 28.05.2008
Сообщений: 4

Re: Помогите написать SQL запрос

Спасибо, но я не силен в SQL и про объединения только читал.
Не прикрутите ли мне этот запрос к этому:
SELECT DISTINCT objects.Id as id, objects.name, pleers.code as pleer FROM objects, pleers, timeMatch, looking WHERE
objects.pleer = pleers.Id AND
objects.userId = '1' AND
LOCATE('2', objects.week) != 0 AND
(timeMatch.oid = objects.Id AND (timeMatch.startTime <= '44000' AND
timeMatch.endTime >= '44000' AND LOCATE('2', timeMatch.week) != 0) ) AND
objects.ban != '1' AND
( looking.time >= 1211130802  AND (looking.uid = '1' AND objects.Id != looking.oid) )

Соответственно lok это looking а obj это object
а дамп базы тут: flytone .ru/fly.sql

Неактивен

 

#4 28.05.2008 22:39:34

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

Re: Помогите написать SQL запрос

Что-то типа


SELECT DISTINCT objects.Id as id, objects.name, pleers.code as pleer
FROM objects, pleers, timeMatch left join looking on objects.Id=looking.oid
WHERE objects.pleer = pleers.Id AND
objects.userId = '1' AND
LOCATE('2', objects.week) != 0 AND
(timeMatch.oid = objects.Id AND (timeMatch.startTime <= '44000' AND
timeMatch.endTime >= '44000' AND LOCATE('2', timeMatch.week) != 0) ) AND
objects.ban != '1' AND
( looking.time >= 1211130802  AND looking.oid is null) );
 

Только я не совсем понимаю, что Вы хотите. Если Id, которых нет в таблице looking, то зачем условие looking.uid = '1'? Они ведь противоречат друг другу.

Неактивен

 

#5 28.05.2008 22:50:40

Cresh
Участник
Зарегистрирован: 28.05.2008
Сообщений: 4

Re: Помогите написать SQL запрос

looking.uid это пользователь который смотрел объект
если записи о нем нет значит он еще не смотрел объект ))

Неактивен

 

#6 02.06.2008 12:16:50

Cresh
Участник
Зарегистрирован: 28.05.2008
Сообщений: 4

Re: Помогите написать SQL запрос

Написал вот так:

SELECT objects.Id as id, pleers.code, objects.name, objects.link FROM objects LEFT JOIN looking ON (objects.Id=looking.oid AND looking.uid = '".$uid."' AND looking.time > '1211014305' )
                      LEFT JOIN timeMatch ON objects.Id=timeMatch.oid
                      LEFT JOIN pleers ON objects.pleer=pleers.Id
            WHERE objects.ban != '1'
            AND objects.userId = '".$user."'
            AND objects.place = '".$place."'
            AND (timeMatch.startTime <= '".$timeMatch."' AND timeMatch.endTime >= '".$timeMatch."' AND Locate('".$week."', timeMatch.week) != 0)
            AND looking.oid Is NULL
            Order By timeMatch.startTime DESC, timeMatch.endTime, timeMatch.week DESC, Rand()
            Limit 1;

Неактивен

 

#7 03.06.2008 08:17:43

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Помогите написать SQL запрос

работает?

Неактивен

 

Board footer

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