Эта тема на forum.dklab.ru


Real_EGGMAN: Число элементов массива
Посмотрел, вроде темы такой нет)
Дело вот в чём, в массив попадают данные из базы -

$Result_news_comments = mysql_query ("SELECT id FROM $Name_table_db_news_comments WHERE News_id='$Myrow_news[id]' ORDER BY id DESC",$db_news_comments);
$Myrow_news_comments = mysql_fetch_array ($Result_news_comments);

по сути должны выбиратся все номера id, где у таблице в параметре News_id поставлено какое то число... задача в том что бы попадающие в массив строки суммировались (1+1+1 и т.д.), что бы было какое то число... похожего эффекта добивался end'ом, но он вытаскивает последнее значение id в номере News_id, даже если там их было 5, 4 удалили, всё равно будет писать 5... а должно быть 1... (вывод число коментариев к новостям мучаю)

подскажите пожалуйста если кто знает, у меня уже сил нет учитывая что большинство функций для работы с массивами перебрал... может быть нужно как то иначе подойти...
Николай Павлюк:
Хм... а mysql-функцию count() отменили?

Попробуйте что-то вроде такого:

$Result_news_comments = mysql_query ("SELECT COUNT(id) FROM $Name_table_db_news_comments WHERE `News_id`='".$Myrow_news[id]."' ORDER BY `id` DESC",$db_news_comments);
$Myrow_news_comments = mysql_result ($Result_news_comments,0,0);

Real_EGGMAN:
Николай Павлюк, безрезультатно( вообще никаких значений не даёт( и с нулями в конце и без них(

таблица примерно такая:

id News_id
1 1
2 1
3 1
5 1

6 2

т.е. должны считаться количество _существующих_ полей по очереди с News_id = 1, потом с News_id = 2, но по очереди в обратном порядке...


вот сам код если в целом виде

do {

/* Комментарии */
$Result_news_comments = mysql_query ("SELECT id FROM $Name_table_db_news_comments WHERE News_id='$Myrow_news[id]' ORDER BY id DESC",$db_news_comments);
if ($Myrow_news_comments != '') {
$Myrow_news_comments = mysql_result ($Result_news_comments); }

printf ("


<table>
<tr bgcolor='#6699FF'>
<td height='50' width='600' colspan='2'><div align='center' class='zg_news'><h3>%s</h></div> </td>
</tr>
<tr bgcolor='#006699'>
<td height='50' width='600' colspan='2'> <div align='center' class='txt_news'>%s</div> </td>
</tr>
<tr bgcolor='#006699'>
<td height='30' width='*'> <div align='center'>%s</div> </td>
<td height='30' width='*'> <div align='center'>Автор: <u>%s</u></div> </td>
</tr>
</tr>
<tr bgcolor='#006699'>
<td height='20' width='600' colspan='2'> <div align='center'><a href='news_comment.php?id_news=%s' target='content' class='link_news'>Комментарии (%s)</a></div> </td>
</tr>
</table>

<hr align='center'>", $Myrow_news['Title'], $Myrow_news['Content'], $Myrow_news['Data'], $Myrow_news['Signature'], $Myrow_news['id'], $Myrow_news_number_comments);


} while ($Myrow_news = mysql_fetch_array ($Result_news));

dimagolov:
Real_EGGMAN, http://phpfaq.ru/debug
Real_EGGMAN:
dimagolov, если где то в коде и должна появляться ошибка, то её нет... да, конечно, дать мануал проще всего... можно было место всего раздела PHP написать одну большую ссылку на php мануал!!
Николай Павлюк:
Real_EGGMAN, не нужно возмущаться, dimagolov дал вам правильную ссыллку, так как я привел вам рабочий пример.
А если посмотреть на тот код в "целом виде", который вы привели, то можна заметить, что замечание по поводу mysql-функции COUNT() не было принято ко вниманию.
Вы выбираете идентификаторы по порядку, а вам нужно получить их кол-во — функция COUNT() для этих целей самое оно, посмотрите внимательно на запрос, который я привел в первом сообщении.
Ф-ция mysql_result() используется тоже неправильно. Если представить результат запроса в виде таблицы, то mysql_result($result,0,0) получит значение из нулевой строки и нулевого столбца.
Real_EGGMAN:
Николай Павлюк, извиняюсь... просто мне до этого ещё два раза (редко прошу помочь) тыкали мануал место нормального совета... а то что возможно человек нагружен с утра до вечера почти без свободного времени что бы читать его в расчёт не принимается......
(а ошибки скрипт не выдаёт что бы использовать ту ссылку)

в общем получилось следующее (в обоих результат 1 комментарий):

do {

/* Комментарии */
$Result_news_comments = mysql_query ("SELECT id FROM $Name_table_db_news_comments WHERE News_id='$Myrow_news[id]' ORDER BY id DESC",$db_news_comments);
$Myrow_news_comments = mysql_result ($Result_news_comments,0,0);
$Myrow_news_number_comments = count ($Myrow_news_comments);

// if ($Myrow_news_comments != '') { }

printf ("


<table>
<tr bgcolor='#6699FF'>
<td height='50' width='600' colspan='2'><div align='center' class='zg_news'><h3>%s</h></div> </td>
</tr>
<tr bgcolor='#006699'>
<td height='50' width='600' colspan='2'> <div align='center' class='txt_news'>%s</div> </td>
</tr>
<tr bgcolor='#006699'>
<td height='30' width='*'> <div align='center'>%s</div> </td>
<td height='30' width='*'> <div align='center'>Автор: <u>%s</u></div> </td>
</tr>
</tr>
<tr bgcolor='#006699'>
<td height='20' width='600' colspan='2'> <div align='center'><a href='news_comment.php?id_news=%s' target='content' class='link_news'>Комментарии (%s)</a></div> </td>
</tr>
</table>

<hr align='center'>", $Myrow_news['Title'], $Myrow_news['Content'], $Myrow_news['Data'], $Myrow_news['Signature'], $Myrow_news['id'], $Myrow_news_number_comments);


} while ($Myrow_news = mysql_fetch_array ($Result_news));
}

Николай Павлюк:
Real_EGGMAN, Вы путаете теплое и мягкое. http://php.net/count — Вам не нужно. Вам нужна mysql-функция count().

$Result_news_comments = mysql_query ("SELECT COUNT(id) FROM $Name_table_db_news_comments WHERE News_id='$Myrow_news'",$db_news_comments); — внимательно посмотрите на этот запрос
$Myrow_news_comments = mysql_result ($Result_news_comments,0,0); — вот здесь и будет кол-во, так как результирующей таблицей будет таблица состоящая ровно из одной ячейки.
$Myrow_news_number_comments = count ($Myrow_news_comments); — это не нужно вообще
Александр Михалицын:
Николай Павлюк,
кажется я уже исправил его ошибку сам.
в ICQ.

Можете больше не стараться.
Нужно было использовать mysql_num_rows().

http://test.systemnik.net.ru/news.zip
Николай Павлюк:
Можете больше не стараться.
Александр Михалицын,
да я, как бы, особо и не старался, хотелось человеку объяснить.

Нужно было использовать mysql_num_rows().
А мне кажется, что нужно правильно строить запросы.
Александр Михалицын:
А мне кажется, что нужно правильно строить запросы.
Вопрос действительно был задан некорректно.
А вот запросы (в смысле SQL) вроде нормальные...
я ошибаюсь? Ну по крайне мере сейчас...

Эта тема на forum.dklab.ru