Помогите с запросом с двух таблиц

robinner

Новичок
Помогите с запросом с двух таблиц

Первый раз делаю запрос такого плана
получилось, но не до конца...
вот запрос
"SELECT `info`.*, `photo`.`photo`, `photo`.`format` FROM `info`, `photo` WHERE `info`.`uid` = `photo`.`uid` ORDER BY `uid` DESC LIMIT 12"

но он выводит повторения например если в таблице photo 2 uid со значением 1 ,он выведет два результата а должен вывести один
`info`.`uid` = `photo`.`uid` DISTINCT пробовал он не отсеивает...
подскажите плиз
 

BadBlock

Новичок
А кто вам сказал, что он должен вывести один, запрос все делает правильно.
 

robinner

Новичок
Автор оригинала: BadBlock
А кто вам сказал, что он должен вывести один, запрос все делает правильно.
Я понимаю что запрос делает правильно)Правильно да только не так как мне надо.
а насчет JOIN я предполагал и пытался,вот только не нашел статьи как это организовать везде только пишется что такое JOIN а как применяется нету
 

dimagolov

Новичок
robinner, начни с того, что объясни, как ты хочешь соединять таблицы.
 

robinner

Новичок
Мне надо чтобы из таблицы info выбирались 12 последних строк и по колонке uid (а в таблице photo храняться фотки и они должны отсеиваться по тоже по uid, но только строка с uid в таблице info только одна может быть, а вот фоток c uid может быть много) но мне не надо чтобы оно выводило много фоток, мне надо чтобы только по одной фотке на каждую строку таблицы info
"SELECT `info`.*, `photo`.`photo`, `photo`.`format` FROM `info`, `photo` WHERE `info`.`uid` = `photo`.`uid` ORDER BY `uid` DESC LIMIT 12"
тут все нормально но только надо доработать именно этот момент, а то оно выводит например так info 3 и photo 3; info 2 и photo 2; info 2 и photo 1; info 1 и photo 0;
а надо например так: info 3 и photo 3; info 2 и photo 1; info 1 и photo 0;
 

dimagolov

Новичок
из таблицы info выбирались 12 последних строк и по колонке uid
это ORDER BY `uid` DESC LIMIT 12
а в таблице photo храняться фотки и они должны Отсеиваться по тоже по uid, но только строка с uid в таблице info только одна может быть, а вот фоток c uid может быть много
Тут поможет LEFT JOIN `photo` ON `info`.`uid` = `photo`.`uid`
LEFT для того, чтобы отобрать записи из info для которых нету записей в photo. Однако, так как фоток может быть более, чем одна на uid, то нужно добавить группировку по uid: GROUP BY `info`.`uid`. Правда, порядок выбора фоток зависит от БД.
 

robinner

Новичок
LEFT JOIN `photo` ON `info`.`uid` = `photo`.`uid`
а куда оно пишется? я просто мануалы смотрел там написано так что у меня не работает как они пишут
 

robinner

Новичок
"SELECT `info`.*, `photo`.`photo`, `photo`.`format` FROM `info`,`photo` LEFT JOIN `photo` ON `info`.`uid` = `photo`.`uid` WHERE `info`.`uid` = `photo`.`uid` GROUP BY `photo`.`id` ORDER BY `uid` DESC LIMIT 12"
тут явно чтото лишнее но я реально не понимаю что

-~{}~ 24.03.10 22:08:

Вот написал стих по этому поводу

Жив здоров,пишу с больницы,
Доканал меня запрос...
В изумлении завис я
И сказал - прощай мой мозг!

Врач смеялся надо мной,
Потому что сука злой!(Примечание автора:говорить голосом Галыгына)
Но увидев в мониторе,
нет, не то что на заборе...

Он увидел страшный код,
Воображения моего плод.
Стал счастливый, да настолько,
Что прилег соседней койкой

Так что с ним теперь соседи,
Рядом Маша и медведи,
Цезарь, Бах, Наполеон,
Вобщем - сумасшедший дом!
 

dimagolov

Новичок
robinner,
1. пиши запросы так, чтобы их можно было читать
2. я тебе группировку по чему говорил делать?
3. рифмоплет, блин.
 

robinner

Новичок
та я за сегодняшний день этот запрос крутил как тока нельзя....
 

robinner

Новичок
то что я читал в мануалах не работает...
а то что вы сказали, я вставил но оно не работает.....
 

robinner

Новичок
Выбрать инфо, фото из таблиц инфоб фото

SELECT `info`.*, `photo`.`photo`, `photo`.`format` FROM `info` так?

ПРИСОЕДЕНИТЬ строки в таблице фото в которых `info`.`uid` = `photo`.`uid`

LEFT JOIN `photo` ON `info`.`uid` = `photo`.`uid`так?

ГДЕ

вот тут не понятно мне что тут ?

ЗГРУППИРОВАТЬ по иду таблицы инфо и вывести 12 штук в порядке убывания по отношению к uid

GROUP BY `info`.`id`ORDER BY `uid` DESC LIMIT 12 так?

но тут точно ошибка

-~{}~ 25.03.10 00:30:

где-то
 

dimagolov

Новичок
да ничего тебе в WHERE не нужно, по крайней мере пока. просто опусти WHERE.

с чего ты взял, что где-то ошибка?
 

robinner

Новичок
Not unique table/alias: 'photo' | SELECT `info`.*, `photo`.`photo`, `photo`.`format` FROM `info`, `photo` LEFT JOIN `photo` ON `info`.`uid` = `photo`.`uid` ORDER BY `uid` DESC LIMIT 12


вот что пишет

-~{}~ 25.03.10 00:38:

сорри не то

-~{}~ 25.03.10 00:46:

SELECT `info`.*, `photo`.`photo`, `photo`.`format` FROM `info`, `photo` LEFT JOIN `photo` ON `info`.`uid` = `photo`.`uid` GROUP BY `info`.`uid` ORDER BY `uid` DESC LIMIT 12

Not unique table/alias: 'photo' вот так пишет
 

dimagolov

Новичок
ты зачем 2 раза `photo` подключаешь? причем когда по частям вопросы задавал все правильно писал...

-~{}~ 24.03.10 20:02:

а читать сообщения об ошибках реальным пацанам западло?
 

robinner

Новичок
ааааааааааааааааааааааааааааааааааааа
спасибо!наконец-то получилось......

вот запрос
SELECT `info`.*, `photo`.`photo`, `photo`.`format` FROM `info` LEFT JOIN `photo` ON `photo`.`uid` = `info`.`uid` GROUP BY `info`.`uid` ORDER BY `uid` DESC LIMIT 12

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

теперь осталось изучить этот запрос досконально и понять, а так же поэкспериментировать, а то я никогда такие запросы не составлял а теперь вот перестраиваюсь.

-~{}~ 25.03.10 11:20:

есть еще такой вопросик
`info`.*, `photo`.`photo`, `photo`.`format`

так и надо писать или можно упростить?

-~{}~ 25.03.10 13:06:

блин теперь наоборот)
выводи инфо без фото
 
Сверху