SQL Join в CodeIgniter - PullRequest
       2

SQL Join в CodeIgniter

0 голосов
/ 05 марта 2011

У меня есть один файл, затем для каждого файла есть несколько комментариев об этом файле. Мне удалось успешно соединить две таблицы, комментарии и файлы, однако, когда я пытаюсь просмотреть страницу, на которой отображается файл и его комментарии, на странице отображается имя файла n раз (n соответствует количеству записей комментариев этого определенного файла).

Как я смогу отобразить только один раз имя файла, а также отображение комментариев?

    <table width="40%" align="center">
        <?php foreach($rows as $file):?>
        <tr>
            <td width="70%" id="title"><?php echo $file->name; ?></td>

        </tr>
        <?php endforeach;?>
    </table>

    <table width="40%" align="center" frame="above" style="margin-top:10px; border-top-width:3px; border-top-color:#666666">
        <?php foreach($rows as $file):?>
        <tr>
            <td width="15%"></td>
            <td width="45%" id="name">FILESIZE:</td>
            <td width="40%" id="txt3"><?php echo $file->size; ?></td>
        </tr>
        <tr>
            <td></td>
            <td id="name">DATE UPLOADED:</td>
            <td id="txt3"><?php echo $file->dateUploaded;?></td>
      </tr>
        <?php endforeach;?>
    </table>
    <!--COMMENTS -->

    <table align="center" frame="above" style="margin-top:10px; border-top-width:3px; border-top-color:#666666" width="40%">
        <tr>
            <td><h3>Comments</h3></td>
        </tr>
        <tr><?php foreach($rows as $comment):?>
            <td><?php echo $comment->comm;?></td>
        </tr><?php endforeach;?>


    </table>

Ответы [ 3 ]

0 голосов
/ 05 марта 2011

Добавление на орбиту, в codeigniter, если вы используете activerecord, это будет: (Извините, я не смог отформатировать код в комментарии)

$ this-> db-> select ('person.id AS ID, имя, GROUP_CONCAT (role.role SEPARATOR ',') AS role ', false);

$ this-> db-> from (' person ');

$ this-> db-> join ('person_role', 'person.id = person_role.person_id', 'left external');

$ this-> db-> join ('role', 'person_role.role_id = role.id ',' left external ');

$ this-> db-> group_by (' id ');

$ this-> db-> order_by ('id '):

$ this-> db-> get ();

0 голосов
/ 05 марта 2011

хорошо, похоже, вы выводите имя файла для каждой строки, которая возвращается

ваши строки возвращаются как

имя | размер | комментарий1
имя | размер | comment2

, поэтому просто не делайте foreach ($rows as $file), который будет печатать имя файла каждый раз, просто измените

<?php foreach($rows as $file):?>
        <tr>
            <td width="70%" id="title"><?php echo $file->name; ?></td>

        </tr>
        <?php endforeach;?>

до

<tr> 
            <td width="70%" id="title"><?php echo $rows[0]->name; ?></td>

        </tr>
0 голосов
/ 05 марта 2011

Вы можете использовать

 GROUP_CONCAT() 

в вашем соединении.

SELECT person.id AS id, name, GROUP_CONCAT(role.role SEPARATOR ',') AS roles
  FROM person
  LEFT OUTER JOIN person_role ON person.id=person_role.person_id
  LEFT OUTER JOIN role ON person_role.role_id=role.id
  GROUP BY id
  ORDER BY id;

является примером из учебника в http://dev -loki.blogspot.com / 2008/01 / агрегатно-Join-результаты с-MySQL-using.html

не может дать намного лучше, не увидев вашу схему.

РЕДАКТИРОВАТЬ: все равно пытается.

SELECT files.*, GROUP_CONCAT(comments.comment SEPARATOR ',') as comments_list
FROM files
LEFT JOIN comments on files.id = comments.id
GROUP BY id
ORDER BY id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...