Разбор полетов с массивами.

El Diablo

Доброе зло
Доброго времени суток! недавно создавал тему, эта тема похожа но уже конкретно по массивам. Старую апать не стал.

Суть: не могу разобраться с работой и созданием массивов.
Задача: Есть таблицы:

Таблица albom:


Таблица photo:


Моя задача - разбить на массивы.
К примеру все строки из таблицы photo со значением поля albom = 1 это один массив который выводится в одном месте страницы.
Поля albom = 2 другой массив и т.п.

Подскажите как это можно реализовать или в каком направлении копать? сижу пересматриваю уроки, поскачивал уроки по PHP хожу уже сколько времени вокруг да около не могу разобраться. Помогите пожалуйста! Заранее благодарен!
 

radioheaded

PHP нуб
Доброго времени суток! недавно создавал тему, эта тема похожа но уже конкретно по массивам. Старую апать не стал.

Суть: не могу разобраться с работой и созданием массивов.
Задача: Есть таблицы:

Таблица albom:


Таблица photo:


Моя задача - разбить на массивы.
К примеру все строки из таблицы photo со значением поля albom = 1 это один массив который выводится в одном месте страницы.
Поля albom = 2 другой массив и т.п.

Подскажите как это можно реализовать или в каком направлении копать? сижу пересматриваю уроки, поскачивал уроки по PHP хожу уже сколько времени вокруг да около не могу разобраться. Помогите пожалуйста! Заранее благодарен!
Всегда одна и та же ошибка. В тех случаях, когда знаний не хватает, когда что-то непонятно, начинать нужно с описания входных и выходных данных. Вот, например, у вас есть вот эти данные в таблицах, это один пример входных данных. Теперь опишите массив, который должен получиться на выходе. Так вы лучше сами поймете, какую структуру вам нужно получить. Со временем научитесь конструировать все это в голове, но пока нужно так. Да и задавая вопрос здесь отвечающим гораздо проще помочь вам, если результат виден наглядно, а не заключается в словесном описании, которое понятно одному вам.
 

El Diablo

Доброе зло
Как раз в этом и основная проблема, я не могу сформулировать конкретное описание т.к. не знаю всех возможностей, и как правильно сформировать описание задачи, я вроде понимаю что мне нужно сформировать массив где ключом будет номер альбома а описанием ключа (индекс) ссылка на картинку. Вроде же правильно написал? я чуть позже нарисую картинку которую хочу получить =)
 

radioheaded

PHP нуб
Зачем вам то, не знаю что? Если вы не знаете, какая должна быть структура, то вы не знаете, как ее использовать. Зачем вам вообще все это?
 

GoodLuck777

Новичок
Скорее всего вам надо реализовать это в запросе к базе данных, которая уже вернет вам нужный массив, что-то типа "Получить все фотографии из альбома с номером 1" - это будет массив фотографий альбома №1, если нужны ВСЕ альбомы и ВСЕ их фотографии можно сделать сначала запрос "Получить названия и ИД всех альбомов" - у вас будет массив с ID альбомами, потом по каждому номеру альбома делаем запрос с получением фотографий и все.
 

sakon

П..и.н..ок
Скорее всего вам надо реализовать это в запросе к базе данных, которая уже вернет вам нужный массив, что-то типа "Получить все фотографии из альбома с номером 1" - это будет массив фотографий альбома №1, если нужны ВСЕ альбомы и ВСЕ их фотографии можно сделать сначала запрос "Получить названия и ИД всех альбомов" - у вас будет массив с ID альбомами, потом по каждому номеру альбома делаем запрос с получением фотографий и все.
Ну-ну. 300 альбомов - 301 обращение к БД.
Достаточно 2-х запросов.
1-й - ID всех альбомов
2-й - все фото.
 

El Diablo

Доброе зло
Я собирал версию фотоальбома где: высыпаются все альбомы:

PHP:
<?php 
$result = mysql_query ("SELECT * FROM albom ORDER BY id DESC",$db);
$myrow = mysql_fetch_array($result);
if (isset($albom)) {echo "<br>Выбирите альбом:<br><br><br>";
		do {echo "<a href='view_photo.php?id={$myrow['id']}'><img src='_admin/{$myrow['preview']}' width='300' height='225'><br>{$myrow['albom']}</a><br>";}
		while($myrow = mysql_fetch_array($result));}
else {echo "Ни одного альбома не созданно.";} ?>
и когда переходят по ссылке методом гет я из фоток выбираю все у которых поле albom имеет тот же номер который был переслан методом GET

PHP:
<?php 
$id = (int)$_GET['id'];
$result = mysql_query("SELECT * FROM `photo` WHERE `albom`=$id ORDER BY id DESC" , $db);
echo "<a href='view_photoalbom.php'>(Вернутся в выбору альбома)</a>";
	$i = 0;
$q = $result;
while($r = mysql_fetch_assoc($q)){
        if($i%3 == 0){
echo "<br>";
        }
		echo "
		<a 
onmouseover='document.".$r['id'].".src='_admin/".$r['pic']."'' 
onmouseout='document.".$r['id'].".src='_admin/".$r['pic']."''
href='_admin/".$r['pic']." ' target='_blank' >
<img border='20' name='".$r['id']."' alt='Фото' src='_admin/".$r['pic']."'height='150'  width='200px'>
</a>
		";
        $i++;
}
echo "<br><a href='view_photoalbom.php'>(Вернутся в выбору альбома)</a>";
?>
Однако, на данный момент у меня задача что бы на странице сразу вываливали фотки альбомов, когда переходят в раздел фото открывалась страничька и выводился первый массив у которого значение взятое из таблици к примеру 1 и из за этого значения выгруженны все фото со значением 1. Вот в таком принципе.
 

GoodLuck777

Новичок
Ну-ну. 300 альбомов - 301 обращение к БД.
Достаточно 2-х запросов.
1-й - ID всех альбомов
2-й - все фото.
Мне кажется вы не понимаете что пишете или советуете, если надо будет вывести ВСЕ фото ВСЕХ альбомов - можно сделать запрос "Выбрать все фото из таблицы фотографии". Получите тот же результат как и "301" запрос. Но для чего может такое понадобиться?

Структура юзер-альбом-фотография наиболее правильная, ИМХО.
 

El Diablo

Доброе зло
Ребят скажите в правильном направлении иду?

PHP:
$result_photo = mysql_query ("SELECT * FROM photo",$db);
$result_albom = mysql_query ("SELECT * FROM albom",$db);
$photo_row = mysql_fetch_row($result_photo);
$albom_row = mysql_fetch_row($result_albom);
do {
	foreach ($albom_row as $id => $albom){
	$AlbomArray = array( "'".$id."'=>'".$albom."'" );
	echo $AlbomArray[0]."<br>";}}
while ($albom_row = mysql_fetch_row($result_albom));
do {
	foreach ($photo_row as $albom => $pic) {
	$PhotoArray = array ("'".$albom."'=>'".$pic."'");
	echo $PhotoArray[0]."<br>";}}
while ($photo_row = mysql_fetch_row($result_photo));


			echo $AlbomArray[0]."<br>";
			echo $PhotoArray[0]."<br>";
 

Фанат

oncle terrible
Команда форума
Не могу видеть эту поповщину. Тошнит.

Ну неужели не хватает здравого смысла, просто вот здравого смысла - увидеть, что $albom_row = mysql_fetch_row($result_albom); пишется всегда по два раза? Неужели никогда не возникало чувство, как от жилки, застрнявшей в зубах? Неужели никогда не возникало желание как-то упростить код, сделать его осмысленнее? Ну вот посмотреть на него, подумать, и переделать?

В любом случае, тебе надо учить SQL и джойны
 

GoodLuck777

Новичок
Ребят скажите в правильном направлении иду?

PHP:
$result_photo = mysql_query ("SELECT * FROM photo",$db);
$result_albom = mysql_query ("SELECT * FROM albom",$db);
$photo_row = mysql_fetch_row($result_photo);
$albom_row = mysql_fetch_row($result_albom);
do {
	foreach ($albom_row as $id => $albom){
	$AlbomArray = array( "'".$id."'=>'".$albom."'" );
	echo $AlbomArray[0]."<br>";}}
while ($albom_row = mysql_fetch_row($result_albom));
do {
	foreach ($photo_row as $albom => $pic) {
	$PhotoArray = array ("'".$albom."'=>'".$pic."'");
	echo $PhotoArray[0]."<br>";}}
while ($photo_row = mysql_fetch_row($result_photo));


			echo $AlbomArray[0]."<br>";
			echo $PhotoArray[0]."<br>";
Да, если ты идешь в Ад для программистов
 

El Diablo

Доброе зло
Господа, реализовал как умею, но я так полагаю, что слишком много запросов к базе получается? в идеале всего 2 запроса ведь нужно? выгрузить альбому, выгрузить фото, сгруппировать выгруженные фото по идентификаторам альбомов. Вот результат, как смог так и сделал:

PHP:
$result_albom = mysql_query ("Select * FROM albom");
$row_albom = mysql_fetch_row ($result_albom);
	do {$photoalbom = $row_albom[0];
		echo "<br><br>";
			$result_photo = mysql_query("select * from photo where albom=$photoalbom");
			$row_photo = mysql_fetch_row ($result_photo);
				do {$photo = $row_photo[1];
					if ($photo != '')
						{echo "$photo<br>";}
					else {echo "Альбом пуст";}
				}
						while ($row_photo = mysql_fetch_array ($result_photo));}
while ($row_albom = mysql_fetch_row ($result_albom))

Не могу видеть эту поповщину. Тошнит.

Ну неужели не хватает здравого смысла, просто вот здравого смысла - увидеть, что $albom_row = mysql_fetch_row($result_albom); пишется всегда по два раза? Неужели никогда не возникало чувство, как от жилки, застрнявшей в зубах? Неужели никогда не возникало желание как-то упростить код, сделать его осмысленнее? Ну вот посмотреть на него, подумать, и переделать?

В любом случае, тебе надо учить SQL и джойны
Я так полагаю под джоинами имеется в виду оператор JOIN (INNER JOIN, SELF JOIN и т.п.?) - я изучил, однако не понял как его применить в моем вопросе?


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

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

GoodLuck777

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

Кстати у меня есть структура юзер-альбом-фото, но цель моей задачи сделать так, что бы вываливалось все на страничке (ну или ограничить по 30 скомпанованных альбомчиков).
Ну мы стебемся не для того чтобы ты убежал в слезах с форума где "все плохие", просто юмор в любом деле вещь полезная =) Мой тебе совет - больше читай книжек и мануалов, ну и пиши всякого разного - скриптов, сайтов и т.п.
 

El Diablo

Доброе зло
Оффтоп.
GoodLuck777 да я понял ) не парся, прост у меня дни сейчас тяжкие =\ я решил сделать как умею, а дальше развиться уже с дотошного изучения. Одна из моих проблем, что я хочу за один укус сьесть весь пирог, я понимаю что код нужно оптимизировать, опыта не хватает.

Я кстати изучение пхп начинал с курсов Евгения Попова, это сейчас я понимаю сколько нюансов и недочетов упущено, да и по сути он дилетант в этом деле однако с него я начал, да еще и то, что он писал свой курс по моему в 2007 - за это время много что изменилось, и то что он часто использует оператор printf, на который часто ругаются программисты, так что потихоньку росту и скоро буду тоже помогать на форуме :)
 
Сверху