непонятная проблема с LEFT JOIN и LIMIT

timasik2010

Новичок
Помогите:

таблица users:
id,name,city,add

таблица photos:
ph_id,ph_user,ph_name,ph_add

задача вывести список пользователей, если фото есть то с 1 фото и использовать LIMIT для постраничного вывода

запрос:

SELECT name,id,ph_name
FROM users
LEFT JOIN photos ON photos.ph_user=users.id
LIMIT 0,10;

не тормозит. но попытки группировать. сортировать по дате добавления зависает всё
тоже самое когда страница вывода отличается от 1.. виснет страшно
что делать не пойму
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
К сожалению телепатов у нас нет.
1. Структуру таблиц?
2. Запрос, и его експлайн?
 

timasik2010

Новичок
CREATE TABLE `users` (
`id` int(16) NOT NULL auto_increment,
`session` varchar(30) default NULL,
`name` varchar(150) default NULL,
`city` varchar(150) default NULL,
`email` varchar(100) default NULL,
`password` varchar(100) default NULL,
`status` varchar(150) default NULL,
`sex` int(1) NOT NULL default '1',
`age` varchar(16) default NULL,
`last` int(16) default NULL,
`add` int(16) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=53114 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=53114 ;

CREATE TABLE `photos` (
`ph_id` int(16) NOT NULL auto_increment,
`ph_user` int(16) default NULL,
`ph_name` varchar(150) default NULL,
`ph_title` varchar(150) default NULL,
`ph_add` int(16) default NULL,
PRIMARY KEY (`ph_id`)
) ENGINE=MyISAM AUTO_INCREMENT=60002 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=60002 ;

SELECT id,name,city,ph_name
FROM users
LEFT JOIN photos ON ph_user=users.id
GROUP BY users.id LIMIT 0,20;
 

timasik2010

Новичок
нужно вывести список пользователей, неважно есть фото или нет, но если есть то 1 фото (ph_name)
связь таблицы users.id и ph_user
 

fixxxer

К.О.
Партнер клуба
>>и его експлайн

explain select твоя фигня

результат сюда
 

timasik2010

Новичок
Array
(
[0] => Array
(
[id] => 1
[select_type] => SIMPLE
=> users
[type] => ALL
[possible_keys] =>
[key] =>
[key_len] =>
[ref] =>
[rows] => 9258
[Extra] => Using temporary; Using filesort
)

[1] => Array
(
[id] => 1
[select_type] => SIMPLE
=> photos
[type] => ALL
[possible_keys] =>
[key] =>
[key_len] =>
[ref] =>
[rows] => 8428
[Extra] =>
)

)


select id,name,city,ph_name
from users
left join photos on ph_user=users.id
order by users.`add` desc
limit 100,20;
 

timasik2010

Новичок
обычно я использовал LEFT JOIN чтобы получить данные из второй, третей таблицы при этом не обязательно что там есть совпадение...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума

timasik2010

Новичок
Mr_Max
нет ты не понял
я знаю чтобы совпадение было запрос простой:
select name,ph_name from users,photos where ph_user=id

а мне нужно чтобы выводился список пользователей и если есть фото то с фото. нет фото без фото
 

timasik2010

Новичок
подскажите как же вывести список пользователей при это вывести 1 фото первое в базе если их несколько или просто пустую переменную ph_name если фото нет...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
А................
Вот оно как
Казнить нельзя помиловать :D

1. Индекс на ph_user
2. ph_user =>> `id` int(16) NOT NULL
3. оптимизация таблицы.
4. Есплайн в студию
 
Сверху