Умный поиск... траблы с созданием запроса

Сенсей

Новичок
Умный поиск... траблы с созданием запроса

Имеются юзеры :

Код:
CREATE TABLE `users` (
  `user_id` int(10) NOT NULL auto_increment,
  `user_nick_name` varchar(255) NOT NULL default '',
  `user_name` varchar(255) NOT NULL default '',
  `user_email` varchar(40) NOT NULL default '',
  `user_icq` int(25) unsigned default NULL,
  `user_sex` tinyint(3) unsigned NOT NULL default '0',
  `user_birth_day` datetime NOT NULL default '0000-00-00 00:00:00',
  `user_sity_id` tinyint(255) NOT NULL default '0',
  `user_notes` text,
  `user_password` varchar(255) NOT NULL default '',
  `user_regdate` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`user_id`),
  UNIQUE KEY `user_nick_name` (`user_nick_name`)
) TYPE=MyISAM;

и имеются фотки юзеров :

Код:
CREATE TABLE `users_photos` (
  `user_photo_id` int(11) unsigned NOT NULL auto_increment,
  `user_photo_user_id` int(11) unsigned NOT NULL default '0',
  `user_photo_desc` varchar(255) NOT NULL default '',
  `user_photo_file` varchar(40) NOT NULL default '',
  `user_photo_date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`user_photo_id`),
  UNIQUE KEY `user_photo_file` (`user_photo_file`),
  KEY `user_photo_user_id` (`user_photo_user_id`)
) TYPE=MyISAM;

Делаю поиск по юзерам по различным критериям (город, возраст и т.д)

С этим справлялся пока не дошел до определения есть ли у юзера фотки...

1 -

Обычный поиск - вывожу инфу о юзерах... + надо вывести - есть фотка или нет ...

Фотка лежит в соответственнов таблицу users_photos и у каждой фотки есть user_photo_user_id который сожержит user_id с таблицы users

Пока вышел из положения делая в цикле запрос count(*) на таблицу фоток ....

Но хочется избавиться от этого решения .. ибо если в поиске нашлось 50 юзеров - то база сделала еще 50 доп запросов к базе ...

Как сделать одним запросом? Какую связку использовать? (join, left join) ?

2 -
При поиске юзер отмечает "Искать только юзеров у которых есть фотка"

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

Как это реализовать? + в случае когда кроме жтого еще проводится поиск и по другоим полям?
 

clevel

Новичок
я бы завел дополнительное поле в таблице юзеров, где бы хранил количество фоток. И обновлял поле только в момент аплоада картинок отдельным юзером.
Согласись, обновлять придтся значительно реже, чем народ ищет по определенным критериям.
 

Wicked

Новичок
Во втором случае тебе еще могут помочь: "count(*) as nphotos" + "users inner join user_photos" + "group by users.user_id" + "having nphotos > 0", расставленные в правильных местах %)
 

chira

Новичок
Wicked
+ "users inner join user_photos" +
заменить на
+ "users LEFT join user_photos" +
тогда подойдёт для обоих случаев ...
 
Сверху