2015-05-13 2 views
1

Я что-то царапаю себе над чем-то, и для жизни меня не может понять это?Php PDO MySQL Table join

Я создаю небольшое приложение на работе, которое напоминает мини-CMS. Вот как это работает.

ситуация пользователя:

журналы пользователей в системе и может видеть список категорий, которым они имеют доступ к (выпуск № 1) они щелкают в эту категорию и там будет список документации, которые связаны с этой категорией (выпуск № 2), они нажимают на этот документ, и они могут видеть информацию о доке (документы doc/docs, на которые я имею в виду, являются только магазинами строк в базе данных и прекрасно работают).

выпуск № 1 - Я не уверен, как ограничить доступ пользователей к определенным категориям или контролировать доступ к этим категориям.

выпуск № 2 - Я разработал, как назначить «doc» для категории, но только 1, и мне нужно, чтобы «doc» имел возможность быть частью нескольких групп, если это необходимо.

Вот как я установил все это вверх:

На странице категории просмотра я захватить данные, чтобы показать категории, как так:

"SELECT * FROM cat_list ORDER BY cat_title ASC" - Мне нужно ограничить, какие категории пользователей см.

При нажатии на категорию это как я запрос к БД:

"SELECT * FROM cat_list WHERE cat_id = ?" 

Я получаю кота идентификатор из URL, так что я знаю, что я нахожусь в этой категории.

Ниже этого я делаю еще один запрос, чтобы показать только документы, относящиеся к этой категории (который работает)

"SELECT doc_list.doc_title, doc_list.cat_no, doc_id FROM doc_list WHERE cat_no = ?" - Но вопрос в таблице doc_list У меня есть колонки под названием cat_no, который является идентификатором кошка и я можем хранить только 1 за один раз, когда документы могут быть aprt из нескольких категорий.

Надеюсь, это имеет смысл?

Вот моя установка базы данных:

категоризации: Таблица:

CREATE TABLE `cat_list` (
`cat_id` int(11) NOT NULL, 
    `cat_title` varchar(32) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf16 AUTO_INCREMENT=5 ; 

Таблица документа:

CREATE TABLE `doc_list` (
`doc_id` int(11) NOT NULL, 
    `doc_title` varchar(50) NOT NULL, 
    `doc_content` text NOT NULL, 
    `doc_created` datetime NOT NULL, 
    `doc_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `user_id` int(11) NOT NULL, 
    `cat_no` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf16 AUTO_INCREMENT=122 ; 

Пользователь таблица:

CREATE TABLE `user_login` (
`id` int(11) NOT NULL, 
    `username` text NOT NULL, 
    `firstname` varchar(30) NOT NULL, 
    `lastname` varchar(50) NOT NULL, 
    `password` varchar(64) NOT NULL, 
    `psalt` text NOT NULL, 
    `role` int(11) NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ; 

UPDATE

<?php require_once '../db_con.php'; 

if(!empty($_GET['cat_id'])){ 
    $cat = intval($_GET['cat_id']); 
try{ 
    $results = $dbh->prepare("SELECT * FROM doc_list WHERE FIND_IN_SET(4, cat_no)"); // I need that number in the FIND_IN_SET to refelct the category I am in 
    $results->bindParam(1, $cat); 
    $results->execute(); 

    } catch(Exception $e) { 
    echo $e->getMessage(); 
    die(); 
    } 

    $doc = $results->fetchAll(PDO::FETCH_ASSOC); 
    if($doc == FALSE){ 

     echo '<div class="container">'; 
     echo "<img src='../img/404.jpg' style='margin: 40px auto; display: block;' />"; 
     echo "<h1 style='margin: 40px auto; display: block; text-align: center;' />Oh Crumbs! You upset the bubba!</h1>"; 
     echo '<a href="userList.php" style="margin: 40px auto; display: block; text-align: center;">Get me outta here!</a>'; 
     echo'</div>'; 
     die(); 
    } 
} 

?> 

Как вы можете выше можно вернуть значение документации в тех категориях, но мне нужно, чтобы взять идентификатор категории Я нахожусь и показать результаты, как в данный момент он работает, только назначая статическое число, как показано выше (4, cat_no) «Мне нужно, чтобы он указывал номер для ссылки на cat_id страницы, на которой я нахожусь

+0

Пожалуйста, смотрите комментарии к вопросу от @prembaranwal, который помог мне ответить на мой собственный вопрос –

ответ

2

issue # 1 - Я не уверен, как ограничить доступ пользователей к определенным категориям или контролировать доступ к этим категориям. Ответ: Создайте роли для пользователя и назначьте эти роли каждому пользователю. В соответствии с ролью пользователя вы можете ограничить доступ пользователей к определенной категории.

выпуск № 2 - Я разработал, как назначить «doc» для категории, но только 1, и мне нужно, чтобы «doc» имел возможность быть частью нескольких групп, если это необходимо. Ответ: В таблице doc_list измените тип данных cat_no как текст и определите все значения категорий как разделенные запятой. Например: для doc1 cat_no будет 1,2,3 (где 1 2 и 3 - разные категории). Затем вы можете использовать FIND_IN_SET mysql, чтобы узнать документы для категории или группы категорий.

+0

Hi @prembarabwal могли бы вы показать мне пример, как использовать FIND_IN_SET из моего кода выше –

+0

Например, в вашей таблице doc_list doc_id будет 1, а cat_no будет 5,7,8. Это означает, что doc с идентификатором 1 привязан к 3 категориям, идентификаторы которых равны 5,7 и 8. Теперь вы хотите получить документы с помощью category_id 7. Ваш sql будет: SELECT * FROM doc_list WHERE FIND_IN_SET (7, cat_no) – prembaranwal

+0

@prembarabwal обновил вопрос и включил Php –

1

Я думаю, вы хотите иметь возможность использовать документы по нескольким категориям.

Затем необходимо добавить дополнительную таблицу между doc_list и cat_list, говорят:

category_documents (table) with columns: 
cd_id (pk) 
cat_id (key of cat_list) 
doc_id (key of doc_list) 

Теперь вы можете использовать документ на несколько категорий.

Теперь оставьте столбец cat_no в таблице doc_list.

2

Пожалуйста, смотрите комментарии @prembaranwal, который помог мне ответить на мой собственный вопрос