Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Запрос массивов


Автор: krasgames 8.2.2010, 21:13
В базе данных есть несколько строк, которые объединяет то, что их написал один пользователь, порядковый номер которого указывается в определенном столбце. Нужно не просто выделить массив, а если склероз меня не сьел, это можно сделать так:
Код

$cool = $database -> database_query("SELECT `album_id` FROM `se_albums` WHERE `album_user_id` = '$t_uid'");
$database -> database_fetch_array($cool);

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

Добавлено через 1 минуту и 48 секунд
ЗЫ Я не шарю в языке, когда речь заходит о массивах, поэтому я написал сюда скорее для того, чтобы освежить грамматику, с помощью которой работать с массивом, а потом уже алгоритм.

Добавлено через 13 минут и 52 секунды
Я сам начну с ошибки, которая возникла при выполнении более простого. Я расчитывал, что это выдаст мне число созданных *альбомов*: 
Код

$cool = $database -> database_query("SELECT `album_id` FROM `se_albums` WHERE `album_user_id` = '$t_uid'");
list($t_cool) = array_count_values($database -> database_fetch_array($cool));

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

Автор: Ипатьев 8.2.2010, 21:38
а что возвращает метод database_query?

Автор: Severyanin 9.2.2010, 05:03
Да и вообще, думаю, описание класса, который инстанцирует объект $database было бы полезным, иначе мало что можно сказать

Автор: krasgames 9.2.2010, 09:27
Я хз, зачем это в движке. $database->database_query заменяет mysql_query. По крайней мере, так думая, я уже писал до этого запросы, и все работало.

Автор: Ипатьев 9.2.2010, 10:18
Я не спрашивал, зачем это в движке.
Я спросил, что эта функция возвращает.
Если эта функция заменяет mysql_query, то ваш код не имеет смысла.
Поищите где-нибудь учебник, в котором описывается работа с mysql_query

Автор: Severyanin 9.2.2010, 15:03
krasgames, скорее всего, перед такими запросами нужно еще послать запрос на работу с определенной бд и проверить, есть ли вообще подключение к mysql

Автор: krasgames 9.2.2010, 18:01
Возможно, она делает и подключение. Я давно не смотрел это, не помню, как там подключение происходило. Могу сказать лишь, что $database->database_query выполняет работу функции mysql_query. 
Пример работающего запроса:
Код

$p3 = $database -> database_query("SELECT `user_views_profile` FROM `se_users` WHERE `user_id` = '$t_uid'");
list($tp3) = $database -> database_fetch_array($p3);

Автор: Ипатьев 9.2.2010, 18:12
на самом деле я неправильный вопрос задал
что делает метод database_fetch_array?

после ответа на этот вопрос можно будет переходить к правильному запросу.

правильный запрос - "SELECT count(`album_id`) FROM `se_albums` WHERE `album_user_id` = '$t_uid'"
результат этого запроса можно будет получить с помощью кода из последнего сообщения

Автор: krasgames 9.2.2010, 20:14
database_fetch_array, как я понял, делает то же, что и mysql_fetch_array.
Код

$cool = $database -> database_query("SELECT count(`album_id`) FROM `se_albums` WHERE `album_user_id` = '$t_uid'");
list($t_cool) = $database -> database_fetch_array($cool));

Так работает. Какие замечания? Я не знаю, как можно сделать проще, мне до этого на этом же форуме только это предлагали.
Но теперь мне надо посчитать не число album_id, а сформировать массив, содержащий все album_id для данного album_user_id. После этого сделать запрос, в котором после where будут перечисленны album_id, а количество файлов после SELECT будет считаться через count. Но может можно и по другому. То есть перехожу к следующей части вопроса. 

Автор: Ипатьев 9.2.2010, 20:37
Цитата(krasgames @  9.2.2010,  20:14 Найти цитируемый пост)
database_fetch_array, как я понял, делает то же, что и mysql_fetch_array.

в этом случае надо внимательно почитать в документации, что делает функция mysql_fetch_array, и подумать, что вернет array_count_values(), если ей передать результат работы mysql_fetch_array


Цитата(krasgames @  9.2.2010,  20:14 Найти цитируемый пост)
То есть перехожу к следующей части вопроса. 

Все подсчеты должна делать база данных
Слышали когда-нибудь про джойны?

Автор: krasgames 10.2.2010, 19:50
Слышал, но хз, как это сделать. 
А насчет массивов, что мне тоже надо припомнить, решил вернуться к первой части, вывести все номера альбомов, которые принадлежат пользователю:
Код

$fi2_array = Array();
$fi2_query = $database -> database_query("SELECT `album_id` FROM 

`se_albums` WHERE `album_user_id` = '$su'");
while($fi2 = $database->database_fetch_assoc($fi2_query)) 
{    $fi2_array[]=Array('album_id' => $fi2[album_id]);}

Код

{section name=fi2_loop loop=$fi2}
{$fi2[fi2_loop]}
    {/section}

Выводит array полезное количество раз. Где ошибся?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)