Массивы: вывод данных

akl

Новичок
Добрый день. У меня есть класс, в нем есть такой метод:
PHP:
public function countAuthor() {
        $query = "SELECT * FROM `author`";
        $result = mysql_query($query) or die('Error, query failed');
        $count_record1 = array();
        while ($row = mysql_fetch_array($result)) {
            $query1 = "SELECT COUNT(*) FROM `news` WHERE author_id = '" . $row[author_id'] . "'";
           $result1 = mysql_query($query1) or die('Error, query failed');
           $count_record = mysql_fetch_array($result1);
           $count_record1[] = $row;
           $count_record1[] = $count_record;
       }
       return $count_record1;
}
Информацию я вывожу таким образом
PHP:
<?PHP
 
$count_record1 = $connect->countAuthor();
 
?>
<div>
     <?PHP foreach ($count_record1 as $count_record12): ?>
        <ul>
            <li><?PHP echo $count_record12[1] . $count_record12["COUNT(*)"]; ?></li>
        </ul>
    <?PHP endforeach; ?>
 
</div>
И получаю такое
Автор1
3
Автор2
1
Автор3
0
А хочу получить такое
Автор1 - 3
Автор2 - 1
и тд

Как мне правильно исправить функцию? Мне на неё даже смотреть стыдно. Сейчас делаю таким образом
PHP:
public function countАuthor() {
    $query = "SELECT * FROM `author`";
    $result = mysql_query($query) or die('Error, query failed');
    while ($row = mysql_fetch_array($result)) {
        $query1 = "SELECT COUNT(*) FROM `news` WHERE author_id = '" . $row['author_id'] . "'";
        $result1 = mysql_query($query1) or die('Error, query failed');
        $count_record = mysql_fetch_array($result1);
        echo '<a href="theme.php?theme=' . $row['author_name'] . '">' . $row['author_name'] . ' (' . $count_record[0] . ')' . '</a>' . '<br>';
    }
}
Вывожу таким образом
PHP:
$connect->countАuthor();
Но я не хочу, чтоб функции занимались представлением информации или это допустимо?
 

Фанат

oncle terrible
Команда форума
во-первых,
PHP:
$count_record1[] = $row;
$count_record1[] = $count_record;
так ты добавляешь два элемента в массив.
а надо только один.
ты можешь сначала добавлять новый элемент в $row
а потом уже добавлять $row в новый массив.

во-вторых, вся я эта пляска с бубнами не нужна вовсе, поскольку уже пора осваивать такой оператор SQL, как JOIN, и получать все нужные данные одним запросом
 

akl

Новичок
С JOIN я знаком, неоднократно пользуюсь. Но в этой ситуации мой мозг говорит мне, что JOIN тут не поможет. Хотя, возможно, я ошибаюсь. Вот посмотрите на мою БД, связь в таблице ON DELETE CASCADE.
В итоге мне надо получать
имя_автора (количество_публикаций)
Например
автор1 (3)
автор2 (1)
автор3 (0)
автор4 (5)
Разве можно эту проблему решить одним запросом к бд? Если да, откройте мне глаза, пожалуйста. Скажите, как лучше сделать. Чтоб я не совершал далее этих ошибок
 

Вложения

Фанат

oncle terrible
Команда форума
Да зачем мне на твою таблицу смотреть, если запросы вижу?
Запрашивай сразу и автора, и количество публикаций. JOIN с GROUP BY
Мозг как-то свою позицию аргументирует?
 

Фанат

oncle terrible
Команда форума
PHP:
SELECT a.*, count(1) cnt FROM `author` a, news n WHERE n.author_id=a.id GROUP BY author_id
и ради бога, давай переменным информативные, но не избыточные имена.
почему записи собираются в массив с $count_record1? почему не просто $records?
 

Фанат

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

fixxxer

К.О.
Партнер клуба
почему в таблице authors поле называется author_id, если и так понятно, что это id автора?
Вообще говоря, авторы SQL, предусмотревшие JOIN ... USING, явно поощряют такое именование.
 

akl

Новичок
PHP:
SELECT a.*, count(1) cnt FROM `author` a, news n WHERE n.author_id=a.id GROUP BY author_id
В вашем запросе ошибка или опечатка, буква n - лишняя. Вот так работает
PHP:
SELECT a.*, count(1) cnt FROM `author` a, news WHERE n.author_id=a.id GROUP BY author_id
и по ссылке надо передавать не имя автора
Мне кажется имя автора красивее смотрится, чем его айди. Это неправильно?
почему записи собираются в массив с $count_record1? почему не просто $records?
Потому что на тот момент, когда я это писал для меня главной была работоспособность скрипта
 

akl

Новичок
И ещё меня интересует вопрос: насколько это правильно, чтоб в функциях были элементы представления информации?
 

Adelf

Administrator
Команда форума
И ещё меня интересует вопрос: насколько это правильно, чтоб в функциях были элементы представления информации?
А вот это правильный вопрос.
Функции должны быть разделены. Функции получающие данные из БД - в одном месте.
Формировать HTML в другом. С помощью шаблонизатора.. или самого PHP - но явно в другом месте.
 

Фанат

oncle terrible
Команда форума
n там не лишнаяя, и на работоспособность влиять не может - это такой же алиас как cnt или а
А вот имя поля указано не такое как у тебя

Мне кажется имя автора красивее смотрится, чем его айди. Это неправильно?
Если хочется добавить имя автора к ссылке для красоты - можно добавить
но id должно быть обязательно.
Для примера смотрим на ссылку на этот топик. Лично я бы её красивой не назвал
 
Сверху