объединение таблиц с выводом одной картинки из списка

Like

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

Поясните плиз НЕопытному как вообще построить запрос, обработку и вывод.
В двух таблицах, где строка одной соответствует строке в другой, где есть несколько картинок и надо выбрать хотябы одну для превьюшки.
Например:
table: main
+----+----------+---------+
| id | name | name_id |
+----+----------+---------+
| 1 | яблоки | 3 |
| 2 | груши | 2 |
| 3 | вишни | 1 |
+----+----------+---------+
table: foto
+-----+------------+---------+
| id | images | foto_id |
+-----+------------+---------+
| 1 | img_1.jpg | 1 |
| 2 | img_2.jpg | 1 |
| 3 | img_3.jpg | 1 |
| 4 | img_4.jpg | 1 |
| 5 | img_5.jpg | 2 |
| 6 | img_6.jpg | 2 |
| 7 | img_7.jpg | 3 |
| 8 | img_8.jpg | 3 |
| 9 | img_9.jpg | 1 |
| 10 | img_10.jpg | 1 |
| 11 | img_11.jpg | 2 |
| 12 | img_12.jpg | 3 |
+-----+------------+---------+
PHP:
 $preimg=mysql_query("SELECT foto.foto_id,images main.name_id FROM foto,main WHERE foto.foto_id=main.name_id");
// запрос может и не правильный, а дальше???
...
...
// вывод должен быть что-то вроде такого
print "<img src=\"../thumb.php?img_path=".$preimg."&px=50 \" alt=\"картинка\"></a>\n";
Что касается обработки запроса $result, то я воздержусь от публикации, чтобы надо мной не посмеялись:) - знал бы не спрашивал. Но у меня получается во всех строках одна картинка, ну оно и понятно...
Помогите пожалуйста НЕопытному.
 

Фанат

oncle terrible
Команда форума
Я думаю, что нет ничего страшного в том, что над тобой посмеются. Не здесь, а вообще, в жизни. Такое впечатление, что кругом одни президенты и генсеки, и стать чуточку смешными для них - это как минимум уронить престиж сверхдержавы.
Ну посмеются, и что? Ты умрёшь от этого? Судя по всему, это гораздо важнее для тебя, чем решение твоей проблемы?

КАК можно помочь человеку, если он не говорит, что у него болит? У врача ты тоже так себя ведёшь - "доктор, я не скажу вам, что уменя болит, вы будете смеяться"? Ну а пришёл ты тогда зачем?

-~{}~ 03.10.06 10:01:

почему в запросе запятой не хватает?
 

Like

Новичок
Да мне по-барабану - пусть смеются, умней буду.
Просто не вижу смысла выкладывать то, что я и сам знаю, что не правильно. Поэтому оставил пространство, где точки, точки, точки - для опытного люда.
Спасибо хоть на этом добром слове:)
Потому, что я в блокноте набирал...
 

Фанат

oncle terrible
Команда форума
Смысл есть.
готовый код на блюдечке тебе здесь всё равно не подадут.
если ты пожелаешь - тебе помогут разобаться с тем, что именно у тебя неправильно. Не пожелаешь - просто придётся искать другой форум.

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

Like

Новичок
Ну смейтесь, смейтесь:)
вот что было дальше (хотя я уже не знаю что именно работало):
PHP:
if (!$result)
$row = mysql_fetch_row($P);
mysql_free_result($P);
//а вывод такой
print "<img src=\"../thumb.php?img_path=".$row["0"]."&px=50 \" alt=\"картинка\"></a>\n";
Да, вот еще 2 вопрос, ну это уже после решения этого: надо бы ессно, если нет картинки условие, чтобы показывал вместо ".$row["0"]." - nopic.jpg ну это уже на мой взгляд будет излишеством на этом форуме. Ну разве, что для остальных таких же НЕзнающих как я.
 

Фанат

oncle terrible
Команда форума
хотя я уже не знаю что именно работало
поясни смысл этой фразы

а код достаточно бессмысленный. вообще-то, он вообще ничего выводить не должен. ни одной картинки.
то есть, я не понимаю - ты хочешь сказать, что это у тебя вообще первый в жизни код вывода информации из мускуля?
может быть, ты сначала научишься её выводить, всё-таки? статьи какие-нибудь почитаешь, документацию там.
Я просто правда не понимаю, как можно писать код вообще ни на чём не основываясь, просто из головы.

ну это уже на мой взгляд будет излишеством на этом форуме
поясни смысл этой фразы

-~{}~ 03.10.06 10:33:

то есть, я тебе говорил о том, что надо санчала с запросом разобраться, но теперь беру свои слова назад.
тебе надо вперёд научиться работать с мускулем. освоить основные функции, научиться выводить информацию из базы.
на простых запросах.
А, уже освоив это, заниматься своим объединением таблиц.
 

Like

Новичок
Код, что я привел, действительно НЕработает. Повторюсь: зачем бы я задавал вопрос, еслиб знаю ответ, я бы наверное ответы писал на такие вот вопросы.
Смысл первой фразы: я ночь не спал и буду не спать, пока не найду решение, надеюсь понятно?
Смысл второй фразы: полагаю, что для других может быть это было бы полезно, хотя мне бы тоже не плохо бы просветиться (менее актуально, чем первый вопрос).
 

Фанат

oncle terrible
Команда форума
смысл фраз "было бы полезно" и "будет излишеством " - противоположный. но отнесём это на недостаток сна.
однако впредь постарайся думать над тем, что пишешь.
Код, что я привел, действительно НЕработает.
ну ты же его не из воздуха взял? Не из пустого места?
Ты можешь ответить на вопрос - ты раньше с мускулем работал? Это твой первый код? Если нет, то почему не взять у себя же рабочий? Если да, то почему такая странная формулировка - "объединение таблиц", а не "научите работать с мускулем"?
 

Фанат

oncle terrible
Команда форума
Не надо ничего менять. Вопрос не в названии, а в том, чтобы понять, что тебе нужно. С этим разобрались.
Теперь идёшь, и читаешь специально для твоего случая написанный на этом сайте текст: http://phpclub.ru/detail/article/phpintro
и выполняешь примеры оттуда. что непонятно - спрашиваешь.
я настоятельно рекомендую тебе именно сделать то, что там написано, и разобраться, как оно работает. а не пытаться прикрутить куски кода к своему.
Кстати, сам я пхп с мускулем начинал изучать именно по этой статье.
 

Like

Новичок
Другой вопрос:
Как добавить еще один аргумент LIMIT ???
Запрос из двух таблиц, где условия выборки по этим двум таблицам с AND а вот LIMIT есть для первой таблицы, а мне нужно добавить еще одно ограничение.
Как мне это сделать?
1. Через запятую не удается
2. Через пробел также не удается
3. Через AND тоже никак

PHP:
$preimg=mysql_query
("SELECT *, images 
FROM main, foto 
WHERE type=$type 
AND foto_id=id 
ORDER BY id DESC 
LIMIT 1,10");
// $type - переменная, которая нужна для других нужд, она работает, на нее не надо обращать внимания
// нужно построить запрос таким образом:
$preimg=mysql_query
("SELECT *, images 
FROM main, foto 
WHERE type=$type 
AND foto_id=id 
ORDER BY id DESC 
LIMIT 1,10 (вот здесь должно быть ограничение для выборки из второй таблицы)");
Подскажите пожалуйста недотепе как добавить еще одно ограничение в LIMIT для второй таблицы?
PS отредактировал, потому, что строчки не влезают :)
 

Like

Новичок
Как это никак?
Я же с самого начала об этом спрашивал!
Прошу меня извинить, что я возможно некорректно задал вопрос.
Тогда подругому задам:
Как мне разбить этот запрос на два, чтобы можно было бы подогнать под эти условия? Уточняю: в том виде как щас, результат запроса выглядит так, что допустим есть 3 записи (3 id) и в фотках по 2-5 картинок. Ну вот мне и выдает листинг из 3 id и еще все картинки, какие есть, а нужно только одну!

-~{}~ 12.10.06 14:58:

Результат выглядит следующим образом:
+----+----------+---------+
| id | name | foto
+----+----------+---------+
| 1 | яблоки | img_1.jpg
| 1 | яблоки | img_2.jpg
| 1 | яблоки | img_3.jpg
| 1 | яблоки | img_4.jpg
| 2 | груши | img_5.jpg
| 2 | груши | img_6.jpg
| 2 | груши | img_11.jpg
| 3 | вишни | img_7.jpg
| 3 | вишни | img_8.jpg
| 3 | вишни | img_12.jpg
+----+----------+---------+
а нужно так:
+----+----------+---------+
| id | name | foto
+----+----------+---------+
| 1 | яблоки | img_1.jpg
| 2 | груши | img_5.jpg
| 3 | вишни | img_7.jpg
+----+----------+---------+
Вот :)

Ну хоть в каком направлении двигаться? Может предзапрос сделать с ограничением 1 или в php написать условие, что если id > 1 то... дальше не знаю:)
 

Like

Новичок
Если пишу:
PHP:
$preimg=mysql_query 
("SELECT *, images  
FROM main, foto  
WHERE type=$type  
AND foto_id=id  
ORDER BY id DESC  
LIMIT 1,10 GROUP BY images");
выдает ошыбку на следующую строку:
mysql_fetch_array(): supplied argument is not a valid MySQL result resource in while ($R=mysql_fetch_array($preimg)) {
 

Фанат

oncle terrible
Команда форума
по-твоему, команды можно пихать в любое место запроса?
 

Like

Новичок
Не знаю:) А что противоречит?
Я посмотрел здесь: http://dev.mysql.com/doc/refman/5.1/en/group-by-hidden-fields.html

-~{}~ 12.10.06 16:28:

Почему нельзя писать вот так:
PHP:
$preimg=mysql_query  
("SELECT *, images   
FROM main, foto   
WHERE type=$type   
AND foto_id=id   
ORDER BY id DESC   
LIMIT 1,10 AND 1");
Все же понятно: ВЫБТАТЬ все из первой таблицы, из второй таблицы только столб images ГДЕ тип=$переменной тип И foto_id=id СОТРИРОВАТЬ ПО id В ПОРЯДКЕ ОГРАНИЧИТЬ в первой таблице начитая с 1, всего 10 И во второй таблице до 1

Я конечно понимаю, что похоже на бред, но должно быть так.
 

Like

Новичок
Получилось!!!
Вот запрос:
$preimg=mysql_query
("SELECT *, images
FROM main, foto
WHERE type=$type
AND foto_id=id
GROUP BY 1
ORDER BY id DESC
LIMIT 1,10");

Еще вопрос можно? (совсем обнаглел:))
Странно, но показывается не первая, или последняя картинка, как было бы логично. А как Бог на душу положит: у id 1 = последняя, id 2 = первая, id 3 = вообще вторая:) Это как так? Что-то с логикой не клеится
 
Сверху