Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [MySQL]Сложный запрос 
V
    Опции темы
Gold Dragon
Дата 16.5.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



есть таблицы

Код

CREATE TABLE `foto_datsogallery` (
  `id` int(11) NOT NULL auto_increment,
  `catid` int(11) NOT NULL default '0',
  `imgdate` varchar(20) default NULL,
  `published` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
)

CREATE TABLE `foto_datsogallery_comments` (
  `cmtid` int(10) NOT NULL auto_increment,
  `cmtpic` int(10) NOT NULL default '0',
  `cmtdate` varchar(20) default NULL,
  `published` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`cmtid`)
)

CREATE TABLE `foto_users` (
  `id` int(11) NOT NULL auto_increment,
  `lastvisitDate` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`),
)


есть известные переменные: foto_datsogallery.catid (допустим 7) и foto_users.id (допустим 98)

необходимо получить
- общее количество записей из foto_datsogallery
- записи где foto_datsogallery.imgdate > foto_users.lastvisitDate
- записи где foto_datsogallery_comments.cmtdate > foto_users.lastvisitDate

первое и второе делаю так
Код

SELECT COUNT( b.id ) AS count 
FROM foto_datsogallery AS a, foto_users AS b
WHERE a.published = '1'
AND a.catid = '7'
AND b.id = 98
AND a.imgdate > UNIX_TIMESTAMP( b.lastvisitDate );
            
SELECT COUNT( b.id ) AS count 
FROM foto_datsogallery AS a, foto_users AS b
WHERE a.published = '1'
AND a.catid = '7'
AND b.id = 98
AND a.imgdate > UNIX_TIMESTAMP( b.lastvisitDate )


а вот с третьим  проблема. Нужно както foto_datsogallery_comments.cmtpic привязать к foto_datsogallery.catid

подскажите

Это сообщение отредактировал(а) Gold Dragon - 16.5.2008, 12:00


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 16.5.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 2
Всего: 42



Gold Dragon, 
Как минимум изменить таблицы
У тебя вообще между ними связи какие-то есть?

Добавлено через 4 минуты и 13 секунд
Что такое у тебя catid  в первой таблице?



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 16.5.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



ну как минимум - это понятно smile

Только это Joomla + Datsogallery, так что ничего изменить нельзя. А это просто один из модулей к компаненту

Цитата(Fortop @  16.5.2008,  13:34 Найти цитируемый пост)
Что такое у тебя catid  в первой таблице?
В первой таблице хранятся фотографии, которые делятся по категориям (catid ) Вторая таблица - это комментарии к фотографиям, третья - регистрационные данные пользователей... (я просто лишнее убрал из таблиц, т.е. то что сейчас не используется.



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 16.5.2008, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 2
Всего: 42



Gold Dragon, 
Я рад что тебе понятно, потому как мне не понятно smile
Цитата(Gold Dragon @  16.5.2008,  11:59 Найти цитируемый пост)
а вот с третьим  проблема. Нужно както foto_datsogallery_comments.cmtpic привязать к foto_datsogallery.catid

Сначала ты говоришь что у тебя проблема, потому что нет связей.

Цитата(Gold Dragon @  16.5.2008,  13:33 Найти цитируемый пост)
В первой таблице хранятся фотографии, которые делятся по категориям (catid ) Вторая таблица - это комментарии к фотографиям, третья - регистрационные данные пользователей... (я просто лишнее убрал из таблиц, т.е. то что сейчас не используется.

Потом, что убрал лишнее smile

Может среди этого лишнего и есть то, что нужно? smile

Понимаешь ли, чтобы комментарии правильно отображались именно к той фотографии - либо таблица фотографий должна содержать в себе ссылки на ИД комментариев, либо что гораздо логичнее таблица комментариев должна иметь столбец содержащий ИД фотографии (к которой относится тот или иной комментарий).

Иначе никак.

Так что или приводи полные таблицы и/или связи между ними smile или ищи телепатов smile


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 17.5.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Fortop,  вот ты меня запутал smile

вот связь
foto_datsogallery.id --> foto_datsogallery_comments.cmtpic


остальные данные таблиц не используются вообще.. ну по крайней мере тут smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 17.5.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 2
Всего: 42



Замечательно, теперь бы ты еще указал как между собой связаны 
foto_datsogallery_comments и foto_users
Если предположить что по полю id и там и там. (в чем я сильно сомневаюсь ) smile
Тогда запрос будет выглядеть примерно так.

Код

SELECT F.id, F.catid, U.lastvisitDate, C.cmtdate FROM foto_datsogallery as F
LEFT JOIN foto_users AS U ON U.id = F.id
LEFT JOIN foto_datsogallery_comments AS C ON C.cmtpic = F.id
WHERE C.cmtdate > U.lastvisitDate




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 19.5.2008, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата(Fortop @  17.5.2008,  15:06 Найти цитируемый пост)
Замечательно, теперь бы ты еще указал как между собой связаны foto_datsogallery_comments и foto_users

а как насчёт прочитать условие? smile
Цитата(Gold Dragon @  16.5.2008,  12:59 Найти цитируемый пост)
необходимо получить- общее количество записей из foto_datsogallery- записи где foto_datsogallery.imgdate > foto_users.lastvisitDate- записи где foto_datsogallery_comments.cmtdate > foto_users.lastvisitDate

и привязать фотографии к категориям



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 19.5.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 2
Всего: 42



Цитата(Gold Dragon @  19.5.2008,  07:50 Найти цитируемый пост)
а как насчёт прочитать условие? 

необходимо получить- общее количество записей из foto_datsogallery- записи где foto_datsogallery.imgdate > foto_users.lastvisitDate- записи где foto_datsogallery_comments.cmtdate > foto_users.lastvisitDate

и привязать фотографии к категориям

Gold Dragon, А они у тебя к чему привязаны?
Каждая фотография у тебя имеет id и catid....


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 20.5.2008, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Fortop, что-то я тебя не понимаю... ну вроде всё написал... Основная база имеет все данные по фотографии: ID, CATID.... дату, автора, оценку, кол. просмотров и т.п. Все остальные таблицы связываются с главной только по ID  фотки.


А мне нужно вытащить последние записи из таблицы комментариев. Последними для посетителя. его последнее посещение хранится в таблице пользователя. Но нужно выташить не общее число комментарием, а только фотографии из определнной категории


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 20.5.2008, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 2
Всего: 42



Gold Dragon,
запрос я давал, только убери JOIN для таблицы пользователей
И подправь WHERE чтобы была проверка на твою категорию

Информацию о посетителе (последняядатавизита) вытаскиваешь отдельным запросом. Раз он у тебя никак не связан с этими двумя таблицами.

получается где-то так
Код

SELECT F.id, F.catid, C.cmtid  FROM foto_datsogallery as F
JOIN foto_datsogallery_comments AS C ON C.cmtpic = F.id
WHERE C.cmtdate > последняядатавизита AND F.catid = категория




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 21.5.2008, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата(Fortop @  20.5.2008,  10:45 Найти цитируемый пост)
Информацию о посетителе (последняядатавизита) вытаскиваешь отдельным запросом. Раз он у тебя никак не связан с этими двумя таблицами.
 smile уже писал и неоднократно foto_users.lastvisitDate

а код сейчас попробую проверить




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 21.5.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 2
Всего: 42



Gold Dragon, 
Цитата(Gold Dragon @  21.5.2008,  09:21 Найти цитируемый пост)
уже писал и неоднократно foto_users.lastvisitDate

Это не связь.

Ты просто хочешь оттуда взять дату. Вот и доставай ее отдельно. Затем вставляй в условие.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 21.5.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



всё заботает.. я там малость своего добавил... Спасибо


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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