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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удалить из базы при отсутствие файла 
:(
    Опции темы
Gold Dragon
Дата 2.9.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



есть две таблицы

в этой талице хранятся фотографии
Код

CREATE TABLE `foto_datsogallery` (
  `id` int(11) NOT NULL auto_increment,
  `catid` int(11) NOT NULL default '0',
  `imgtitle` text NOT NULL,
  `imgauthor` varchar(50) default NULL,
  `imgtext` text NOT NULL,
  `imgdate` varchar(20) default NULL,
  `imgcounter` int(11) NOT NULL default '0',
  `imgvotes` int(11) NOT NULL default '0',
  `imgvotesum` int(11) NOT NULL default '0',
  `published` tinyint(1) NOT NULL default '0',
  `ordering` int(11) NOT NULL default '0',
  `imgoriginalname` varchar(50) NOT NULL default '',
  `imgfilename` varchar(50) NOT NULL default '',
  `imgthumbname` varchar(50) NOT NULL default '',
  `checked_out` int(11) NOT NULL default '0',
  `owner` varchar(50) NOT NULL default '',
  `approved` int(1) NOT NULL default '0',
  `useruploaded` int(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',
  `cmtip` varchar(15) NOT NULL default '',
  `cmtname` varchar(20) NOT NULL default '',
  `cmttext` text NOT NULL,
  `cmtdate` varchar(20) default NULL,
  `published` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`cmtid`)
)


связываются таблицы так
`foto_datsogallery`.`id`=`foto_datsogallery_comments`.`cmtpic`

в `foto_datsogallery`.`imgoriginalname` хранится имя файла.

Задача такая: удалить из таблицы комментариев комментарии тех фотографий которых не существует на сервере (фотки физически удалены с сервера, а запись о них осталась в базе).

Как это можно оптимально организовать?


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


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



Наверное
Код

if (!file_exists("...")) {
  mysql_query("...");
}



--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Gold Dragon
Дата 2.9.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

просто что-то даже не могу понять как это организовать


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


неОпытный
****


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

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



фи. не делать же на каждую запись проверку!
делаем отдельную таблицу(можно - temporary), в которую запихиваем одним циклом имена картинок, имеющихся в папке. после чего, сделав left join на эту таблицу, вполне можно будет удалить записи, не имеющих связей с существующими файлами.
PM MAIL   Вверх
Gold Dragon
Дата 2.9.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



skyboy,  smile 
чёрт, совсем не подумал об этом.... А я тутвсякие циклы придумываю..

А как мне перебрать все файлы в папке? просто с файлами не очень хорошо работаю... smile


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


Эксперт
***


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

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



Gold Dragon, для этой задачи проще всего результат ls. Где-то так:
Код

exec('ls -1', $files);
$sql = 'INSERT INTO tmp_table VALUES (\''.join('\'),(\''), $files);



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


Walking around mad.
***


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

Репутация: 4
Всего: 91



есть к файлу идёт обращение не напрямую, а через скрипт, то лучше сделать как сказал(о/а) Kesh.

Это сообщение отредактировал(а) gta4kv - 2.9.2008, 16:40
PM MAIL   Вверх
skyboy
Дата 2.9.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



можно воспользоваться glob, который за один вызов тебе вернет список файлов.
PM MAIL   Вверх
Gold Dragon
Дата 3.9.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



glob понравился smile

вот только не сображу как запрос то  составить...  smile 


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


 




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


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

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