2013-03-06 1 views
0

У меня есть код PHP для выбора категорий из tbl_categorie. Теперь у меня есть множественный выбор в форме, где статья может содержать более одной категории. При вставке значений в базу данных я хочу сохранить несколько значений категорий в одном столбце/атрибуте. Если атрибут ID_CAT хранит только идентификаторы категорий tbl_categorie, разделенные запятой (,). У меня есть две таблицы в одной БД,Хранить и извлекать столбцы CSV из базы данных с помощью implode и magic __get()

tbl_blog:       
    ID_BLOG ID_CAT    TITLE   ARTICL  DATE 
    1   1,3     title1   article1  2013-03-04 
    2   4,10     title2   article2  2013-03-04 
    3   3,6     title3   article3  2013-03-04 

tbl_categorie:       
    ID_CAT NOM_CAT    
    1   HTML     
    2   CSS     
    3   DESIGN 
    4   PHP 
    5 .. 

У меня есть проблема в первую очередь добавить буксировочный ID_CAT для одной статьи, хотя я использовал взрываться() Постулаты, но она работает, когда я изменить тип ID_CAT от ИНТ к VARCHAR, и это процесс, чтобы добавить статью:

Article::creatArticle(0,$_POST['title'],implode(', ', $_POST['id_categorie']),$_POST['article']); 

и это функция, чтобы добавить статью из class_article:

/** 
* function créeArticle 
*/ 
public static function creatArticle($id_article,$title,$id_categorie,$article) 
{ 
    global $db; 
    $req = $db->prepare("INSERT INTO blog (ID_BLOG,TITLE,ID_CAT, ARTICLE,DATE) VALUES ('',:title,:id_categorie,:article,'".date('Y-m-d')."')"); 
    $ok = $req->execute(Array('title' =>$title,'id_categorie' => $id_categorie,'article' => $article)); 
    return $db->lastInsertId(); 
    //$erreur = $req->errorInfo(); 
} 

теперь у меня есть Prob чтобы получить все категории, для которых в каждой статье есть, и именно так я забираю в своем бэк-офисе таблицу статей, используя магический метод get(), который она возвращает только в первом значении в столбце:

<?php 
    foreach(Article::getAllArticle()as $blog){ 
     $article= new Article($blog->ID_BLOG); 
     $categorie = new Categorie($article->getIDCategorie()); 

     echo' 
        <tr>'; 
          echo '<td><input type="checkbox" /></td>'; 
          echo '<td>'.$article->getTitlearticle().'</td>'; 
          echo '<td>'.$categorie->getNomCategorie().'</td>'; 
          echo '<td>'.$article->getDatearticle().'</td>'; 
          echo '<td>35</td>'; 
          echo ' <td class="actions">'; 
          echo '<a href="javascript:editArticle('.$article->getIDarticle().');" title="Edit this content"><img src="img/icons/actions/edit.png" alt="" /></a>'; 
          echo ' <a href="javascript:deleteArticle('.$article->getIDarticle().');" title="Delete this content"><img src="img/icons/actions/delete.png" alt="" /></a></td>'; 
          echo '</tr>'; 

         } .. 

Я знаю, что мне нужно использовать statode explode() или создать цикл, но я не могу понять, как это сделать :(, и у меня есть сомнения относительно типа ID_CAT, должен быть varchar сделать проблему? спасибо!

ответ

0

Трудно понять, что вы делаете и что хотите. Я не уверен, что вы получаете результаты из файла CSV или из базы данных?

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

tbl_blog:       
    ID_BLOG    TITLE   ARTICL  DATE 
    1      title1   article1  2013-03-04 
    2      title2   article2  2013-03-04 
    3      title3   article3  2013-03-04 

tbl_categorie:       
    ID_CAT NOM_CAT    
    1   HTML 

tbl_blogcat 
ID_BLOG ID_CAT 
1   1 
1   3 
2   4 
2   10 

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

0

Эта проблема может быть решена легко, вы можете создать новую таблицу, в которой будет храниться информация об tbl_blog и tbl_catagory. Преимущество заключается в том, когда вы выбираете еще одну категорию блога, она будет хранить вашу информацию в каждой категории блога. таблица выглядит так:

 

tbl_combine: 

ID_COMB ID_Blog ID_Cat 
1   1   2 
2   1   1 
3   1   3 
4   2   3 
5   2   2 
6   3   1 
7   3   2 
8   3   3 

 

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

Затем мы можем получить любые категории блога. Запрос выглядит так.

 





SELECT 
     (SELECT category_name FROM tbl_catagory 
     WHERE id_cat=A.id_cat) 
     AS catagory_name 
FROM tbl_combine 
AS A 
WHERE id_blog=$blog_id 




 

Примечание мы только магазин идентификатор tbl_blog и tbl_catagory таблиц tbl_combine это не замедлит

 Смежные вопросы

  • Нет связанных вопросов^_^