Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
Сперва хочю поблагодарить авторов за такой замечательный сайт, спасибО! Очень много полезной информации.
И хотел бы задать вопрос: Как создать запрос из двух таблиц:
Первая таблица _users:
id name username
1 My_name1 My_username1
2 My_name2 My_username2
3 My_name3 My_username3
4 My_name4 My_username4
5 My_name5 My_username5
6 My_name6 My_username6
Вторая таблица _messages:
id name text
1 My_name1 Text10
2 My_name1 Text11
3 My_name1 Text12
4 My_name1 Text13
5 My_name1 Text14
6 My_name2 Text20
7 My_name2 Text24
8 My_name6 Text67
Как получить такую таблицу:
id name text username
1 My_name1 Text10 My_username1
2 My_name1 Text11 My_username1
3 My_name1 Text12 My_username1
4 My_name1 Text13 My_username1
5 My_name1 Text14 My_username1
6 My_name2 Text20 My_username2
7 My_name2 Text24 My_username2
8 My_name6 Text67 My_username6
Если количество строк первой и второй таблиц разное!
Спасибо!
Неактивен
SELECT m.*, u.username
FROM _messages m JOIN _users u USING(name);
Но лучше всё-таки в _messages хранить ссылку на _user.id, а не на _user.name.
Неактивен
А почему так лучше будет?
Неактивен
а) будете хранить меньше информации
б) запрос будет отрабатывать быстрее (т.к. будут более короткие индексы)
Неактивен
Запрос, который Вы написали выше выводит таблицу если в двух таблицах есть одинаковая строка. А как Выводить полностью всю таблицу _messages и если name не найдено в таблице _users вывести пустое значение?
Неактивен
Как альтернатива я в php в цикле могу сделать запрос и получать данные:
$sql = "SELECT * FROM #__messages WHERE #__messages.`roomid` = ".$roomid." ORDER BY id DESC LIMIT 50";
...
for ($i=0; $i<count($row); $i++) {
$username = getusernamebyname($row[$i]['name']);
}
function getusernamebyname($name) {
$sql = "SELECT #__users.`username` FROM #__users WHERE #__users.`name` = '".$name."' LIMIT 1";
...
return $uname;
}
Такой подход работает, но на сколько он граммотный? Я имею ввиду по скорости работы. Т.к код используется в чате.
Неактивен
ivanz написал:
Запрос, который Вы написали выше выводит таблицу если в двух таблицах есть одинаковая строка. А как Выводить полностью всю таблицу _messages и если name не найдено в таблице _users вывести пустое значение?
Замените JOIN на LEFT JOIN.
Неактивен
Огромное спасибо! Все работает!
Неактивен