#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…