Удаление дубликата кода - PullRequest
2 голосов
/ 03 июля 2011

Я работаю над проектом, и я просто хотел получить некоторую помощь о том, как подойти к этой проблеме, помочь очистить код и удалить много дубликатов.

У меня есть таблица базы данных FAQ с " id, user_id, faq_question, faq_text, sort_id".Теперь каждый раз, когда создается динамический сайт, у меня есть запрос на вставку, который создает сайт, а затем также вставляет в таблицу часто задаваемых вопросов вопросы и ответы по умолчанию, которые я хочу использовать.

    $insertFAQ = array(
        'user_id' => $user_id,
        'faq_question' => 'Default Question',
        'faq_text' => 'Default Answer',
        'sort_id' => '1'
    );


    $Db->insert('faq', $insertFAQ);

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

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

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

PS - Как я могу добавить несколько вопросов / ответов в вышеупомянутом массиве, который я разместил?

Ответы [ 3 ]

1 голос
/ 03 июля 2011

Одним из способов было бы иметь поле site_id в таблице.Для глобальных часто задаваемых вопросов site_id может быть null.

Затем, чтобы получить часто задаваемые вопросы для сайта:

 SELECT * FROM faq WHERE site_id IS NULL OR site_id = $site_id
1 голос
/ 03 июля 2011

AS для нескольких вопросов в массиве, который вы разместили в вопросе, вы можете просто иметь многомерный массив:

$insertFAQ = array( 
    0 =>array(
    'user_id' => $user_id,
    'faq_question' => 'Default Question',
    'faq_text' => 'Default Answer',
    'sort_id' => '1'
),

1 =>array(
    'user_id' => $user_id,
    'faq_question' => 'Default Question',
    'faq_text' => 'Default Answer',
    'sort_id' => '1'
),
 2 => array(
    'user_id' => $user_id,
    'faq_question' => 'Default Question',
    'faq_text' => 'Default Answer',
    'sort_id' => '1'
) );`

и т. Д. И сын.

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

id, faq_id, site_id, sort_order

Если создан новый сайт, вы просто создаете новую запись для него в этой таблице, и тогда вопросы не должны повторяться, вы только указываете, какой порядок идет на какой сайт.

0 голосов
/ 03 июля 2011

Если я правильно понимаю ваш вопрос ... Мне кажется, вам просто нужно отделить вопрос / ответ от записи пользователя и вместо этого иметь ссылку на запись вопроса / ответа в записи пользователя:

// insert if it doesn't exist
$insertFAQ = array(
        'faq_id' => $faq_id,
        'faq_question' => 'Default Question',
        'faq_text' => 'Default Answer'
    );

// get faq id of newly inserted or existing faq entry
...

// insert user
$insertUser = array(
        'user_id' => $user_id,
        'faq_id' => $faq_id,
        'sort_id' => '1'
    );
...