Как получить отдельные данные из массива, разделенного запятыми, и отобразить данные этой записи с помощью codeigniter php

#php #jquery #mysql #codeigniter

#php #jquery #mysql #codeigniter

Вопрос:

Привет, у меня есть таблица портфолио, куда я вставляю весь свой список портфолио.При вставке списка портфолио я буду вставлять теги, разделенные запятыми.Но при извлечении данных он должен в этом

Контроллер:

     $data["records2"] = $this->portfolio_model->get_portfolio();
    $data['mainpage'] = "portfolio";
    $this->load->view('templates/template',$data);
  

Модель:

 function get_portfolio()
{
    $this->db->Select('portfolio.*');
    $this->db->From('portfolio');
    $this->db->where(array('portfolio.status'=>1));
    $q=$this->db->get();
    if($q->num_rows()>0)      
    {       
        return $q->result();
     }
        else
        {
    return false;
  }
}
  

Вид:

 <div class="materials"> 
                    <div class="class453">              
                    <a href="#"  class="read_more12">All</a>
                    </div>
                    <div class="class455">
                    <a href="#"  class="read_more13">E-Commerce</a>
                    </div>
                    <div class="class459">
                    <a href="#"  class="read_more14">Cms</a>
                    </div>
                   </div>

     <?php 
        $cnt = 0;
                if(isset($records2) amp;amp; is_array($records2)):?>
                <?php foreach ($records2 as $r):?>  
                <div class="portfolioimages">                   
    <a href="<?php echo $r->website_url;?>" target="_blank"><img src="<?php echo base_url();?>admin/images/portfolio/thumbs/<?php echo $r->image_path;?>" /></a>
</div>
<?php if(($cnt%3) == 0) { echo "<br>"; }            
                $cnt  ; endforeach; endif;?>
</div>
  

В моей базе данных это будет вставка данных в формате:

введите описание изображения здесь

при извлечении данных он должен получить все данные, но если мы нажмем на CMS, должны отображаться только данные для этого конкретного тега. Пример: если мы выбираем cms, то должны отображаться идентификаторы 1,3,4, потому что это теги cms, если мы выбираем электронную коммерцию, то должны отображаться идентификаторы 1,2,4.Как это можно сделать.

Комментарии:

1. Вот идея. НЕ вставляйте теги, разделенные запятыми.

2. Затем как вставить данные в базу данных

3. выберите * из имя_таблицы, где FIND_IN_SET (‘cms’, теги)>0

4. image_id, tag_id.

5. @JYoThI если их больше 5, то как мы можем так написать

Ответ №1:

Хранить теги в списке, разделенном запятыми, — плохая практика. Все теги всегда должны храниться в другой таблице, которая может быть связана с вашей основной таблицей через сводную таблицу.

В вашем случае кажется, что у портфолио может быть много тегов, а тег может принадлежать многим портфелям, поэтому у вас должна быть структура БД примерно такая :

Портфолио

 id 
title
description
image
  

Теги

 id 
tag
  

porfolio_tag (сводная таблица)

 portfolio_id
tag_id
  

Однако, если вы хотите продолжить свой текущий дизайн, вы можете просто выбрать записи как есть, а затем использовать функцию explode php

Комментарии:

1. но как мы можем отобразить данные, выбранные в определенном теге

2. Это совершенно другой вопрос.

3. @TimBrownlaw я опубликовал вопрос только для этой цели, как извлечь данные для определенного тега и отобразить эти данные

4. Я понимаю это, но вы смотрите на мир скорби, делая это так, как вы изложили здесь, и все, что мы делаем, это пытаемся указать вам правильное направление. Но если вы действительно настаиваете…

Ответ №2:

Хорошо, просто чтобы уточнить немного больше, не превращая это в основное руководство, здесь упоминается тот факт, что если вам нужно хранить повторяющиеся строки, разделенные запятыми, и вы хотите выполнить поиск в тех, которые используют sql, тогда вам нужно пересмотреть свой дизайн.

Что вам нужно, так это таблица соединений и таблица тегов. Таким образом, таблица тегов будет выглядеть следующим образом…

 tags table
==========
ids     name
1       All
2       CMS
3       E-Commerce
  

Тогда ваша таблица объединяющих / сводных portfolio_tag будет

 portfolio_tag
=============
portfolio_id        tag_id
1                   2
1                   3
2                   3
3                   2
4                   1
  

Таким образом, вы могли бы отображать все свои теги с соответствующими идентификаторами
Итак, если я выбрал CMS, то в результате получается идентификатор 2 из таблицы тегов.
Затем, ссылаясь на это из сводной таблицы, я могу получить все идентификаторы портфелей, соответствующие tag_id = 2.

В этом суть того, к чему вы должны стремиться.

Не помешало бы пойти и немного почитать сводные таблицы и объединения. Я не пытаюсь сделать какой-то ненужный комментарий по этому поводу, но здесь слишком много объяснений, чтобы их приводить.

Комментарии:

1. если мы извлекаем теги из другой таблицы, которые должны отображаться в заголовке, и извлекаем портфолио с другой страницы, это не работает, потому что весь код находится на одной странице php, поэтому я могу извлекать данные из этих таблиц, потому что не будет никакой связи между портфолио и таблицей тегов

2. Да, есть, для этого и предназначена сводная таблица! Это сводная таблица, которая определяет взаимосвязь между портфолио и тегами. Это называется отношением «многие ко многим» с акцентом на термин «отношение»! Вы используете соединение в своем SQL. Итак, когда вы создаете / редактируете портфолио, вы будете отображать теги и выбирать те, которые связаны с портфолио. Самое интересное заключается в управлении этим… Как я и предлагал, было бы неплохо прочитать об этом в Google…