2009-07-27 2 views
2

Моя установка выглядит следующим образом:PHP CodeIgniter сборки результатов запроса

Table 'data': 'title','body',...,'user_id',... 
Table 'users': 'user_id','some_val'... 

В основном я хочу, чтобы каким-то образом соединить таблицы «данные» и «пользователей» на user_id поле, так что я могу вытащить «some_val» из «таблица пользователей». Моя проблема заключается в том, что не каждый user_id в таблице «data» имеет соответствующую запись в таблице «users».

С помощью codeigniter/php я в конечном итоге хочу собрать массив результатов, содержащий все «some_vals» из таблицы «users», соединяющей data.user_id = users.user_id. НО, когда в таблице данных есть user_id, но НЕ в таблице users, я хочу вставить какое-то значение по умолчанию в мой массив результатов (и, надеюсь, этот массив может быть в том же порядке, что и user_id в таблице данных).

Надеюсь, это было не слишком непонятно. Есть идеи?

ответ

2

Что вы хотите сделать, это то, что называется left join. По существу, это занимает все строки data и соответствует таблице users. Кроме того, если data не имеет соответствия user_id, он просто загружает null для этих столбцов. Чтобы справиться с этими null, вы можете использовать функцию coalesce, которая заменяет null некоторым значением (может быть 1234, если оно числовое, но я только что выбрал 'DefaultVal' для демонстрационных целей).

Во всяком случае, все это приходит вместе, как так:

select 
    coalesce(u.some_val, 'DefaultVal') as some_val 
from 
    data d 
    left join users u on 
     d.user_id = u.user_id 
+0

спасибо за ответ быстро, глядя на этот запрос - не будет мне нужно сделать 'из данных й, пользователи U ..? – oym

+0

Нет. 'из данных d, пользователи u' являются сокращением для выражения' от данных d внутренних пользователей соединения u на ... '. В этом случае мы используем 'left join', а не' inner join'. «Внутреннее соединение» позволит вам * только * строки данных с действительным 'user_id'. «Левое соединение» будет получать ваши * все * строки и возвращать 'null' для столбцов' users', которые не соответствуют 'user_id' данных' data'. – Eric

+0

oh nevermind, я прочитал его более тщательно, и то, что я сказал, не имеет смысла ... спасибо за помощь! не знал о функции coalesce. – oym

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