Отображение нескольких значений с того же имени поле базы данных MySQL в Codeigniter & Dwoo

Я создаю веб-приложение и решил использовать подобную таблицу и имена полей к Wordpress в моем приложении. Этим я подразумеваю, что у меня есть пользовательская таблица и usermeta таблица, подобная тому, как Wordpress работает.

Простите мне за то, что сделали этот вопрос столь же большим, я решил быть максимально описательным в этом вопросе.

usermeta таблица имеет значения следующей таблицы;

umeta_id
user_id
meta_key
meta_val

Как пример у меня есть следующие данные в моей usermeta таблице;

user_id = 1
meta_key = first_name
meta_value = 'dwayne

user_id = 1
meta_key = last_name
meta_value = charrington

В моей пользовательской таблице у меня есть следующие данные в качестве примера;

ИДЕНТИФИКАТОР = 1
user_login = администратор
user_pass = ui3h423h4o82374
user_email = test@test.com

В основном то, что я хочу сделать, использует следующее соединение, которое кажется виду работы, виду:

$db = $this->db;
$db->select('wolf_users.ID, wolf_usermeta.user_id AS ID', FALSE);
$db->select('wolf_users.user_login AS user_login', FALSE);
$db->select('wolf_users.user_email AS user_email', FALSE);
$db->select('wolf_users.user_status AS status', FALSE);
$db->select('wolf_usermeta.meta_key AS meta_key', FALSE);
$db->select('wolf_usermeta.meta_value AS meta_value', FALSE);
$db->from('wolf_users');
$db->join('wolf_usermeta', 'wolf_users.ID = wolf_usermeta.user_id', 'left');
$db->where('wolf_usermeta.user_id = wolf_users.ID');
$q = $db->get();
return $q->result_array();

Во-первых: result_array, кажется, возвращает дублирующиеся данные из моей базы данных (который является немного странным), я отформатировал свое соединение неправильно или есть ли что-то, что я пропускаю для предотвращения этого? при возврате результатов просто с помощью $q-> результат (), кажется, останавливает дублирующиеся возвращаемые данные.

Я использую Dwoo для своей шаблонной обработки и когда я повторяю переменную, которая содержит данные с помощью print_r, это не показывает дублирующегося содержания запроса при использовании запроса, но показывает дублирующееся содержание при использовании result_array (почти как циклично выполненный по usermeta таблице несколько раз).

Одна из страниц, на которых я использую этот запрос базы данных, является страницей, которая перечисляет все клиенты в базе данных и затем выбирает соответствие данным из usermeta таблицы. Таким образом, мой вопрос состоит в том, как я получаю доступ к данным из обеих таблиц и затем отображаюсь, это в моем приложении с помощью foreach, по моему мнению, обрабатывает по шаблону?

1
задан Dwayne Charrington 18 July 2010 в 04:35
поделиться

3 ответа

Вы понимаете, как работают объединения?

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

Этого можно было избежать с помощью foreach после извлечения данных из базы данных или путем разделения вашего запроса на два запроса.

$user = $this->db
    ->select('ID, user_login, user_email, user_status AS status')
    ->where('ID', $id)
    ->get('wolf_users')
    ->row_array();

if(!$user)
{
    return FALSE;
}

$user['meta'] = $this->db
    ->select('meta_key, meta_value')
    ->where('user_id', $id)
    ->get('wolf_usermeta')
    ->result_array();

return $user;

Несколько общих советов и рекомендаций по MySQL:

wolf_users.ID, wolf_usermeta.user_id AS ID

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

$db->select('wolf_usermeta.meta_value AS meta_value', FALSE);

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

Удачи!

2
ответ дан 2 September 2019 в 22:57
поделиться

Вы ожидаете, что появятся две строки с учетом ваших данных выборки; Я не знаю, что вы имеете в виду под «повторяющимися данными». Эти строки должны отличаться тем, что у них будут разные значения для meta_key и meta_value.

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

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

0
ответ дан 2 September 2019 в 22:57
поделиться

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

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

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

У меня также нет ограничений уникального ключа, может ли установка поля в качестве уникального ключа вызвать проблемы? Я думал сделать user_login (поле имени пользователя) уникальным ключом, чтобы предотвратить дублирование имен.

0
ответ дан 2 September 2019 в 22:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: