comments
- id_comment (идентификатор коммента)
- subject (комментируемый предмет)
- comments (текст комментария)
- data_comment (дата написания коммента)
- author (идентификатор автора коммента)
user
- id_user (идентификатор пользователя)
- login (логин, имя пользователя)
- mail (электронная почта пользователя)
- password (пароль пользователя для входа в систему)
- date_reg (дата регистрации пользователя)
Выборка из одой таблицы делается так:
$sql = "SELECT *
FROM comments
WHERE subject = '$photo'
ORDER BY id_comment DESC";
$query = mysqli_query($connect, $sql) or die(mysqli_error());
Таким образом мы можем вывести все комментарии к определенной фотографии, но о авторе комментов мы ни чего не будем знать кроме его идентификаторе (id). Я хочу видеть имя того, кто написал тот или иной коммент, конечно в таблице comments, в поле author можно вставлять логин пользователя вместо его идентификатора, но а если пользователь сменит свое имя? Что будет тогда? В комментариях будет отображаться неверная информация о авторе.
В общем делаем, как я писал выше, сначала получаем информацию о комменте, затем о его авторе:
$sql = "SELECT *
FROM comments a, user b
WHERE a.subject = '$photo'
AND b.id_user = a.author
ORDER BY a.id_comment DESC";
$query = mysqli_query($connect, $sql) or die(mysqli_error());
Рассказываю, что я сделал: первая строчка
$sql = "SELECT *
(выбрать всё) осталась без изменений, последняя строчка тоже не изменилась, а вот все остальные были изменены.
Вторая строчка
FROM comments a, user b
- (из каких таблиц делать выборку) идет перечисление таблиц с присвоенными им буквами a
и b
. Таблицы comments принадлежит буква a
, таблице user буква b
. Присваивание букв делается для команды из какой таблицы, что выбирать.
В третей строке
WHERE a.subject = '$photo'
запрос говорит, что выборку надо делать в таблице, которой присвоена буква a
(то есть comments) по значению переменной $photo
.
Далее, четвертая строка
AND b.id_user = a.author
запрос говорит - продолжать выборку, но уже в таблице с буквой b
(то есть user). Тут мы получаем информацию о пользователе с одинаковым идентификатором автора коммента из таблицы comments и пользователя из таблицы user.
Пятая строка запроса
ORDER BY a.id_comment DESC";
- командует о сортировке комментариев в обратном порядке по содержимому поля id_comment, из таблицы с буквой a
.Прошу заметить, что у меня в таблицах нет одинаковых названий полей, все названия уникальны. То есть, я даже не назвал поля идентификатора коммента или пользователя не просто id, я дал им названия id_comment и id_user, что бы избежать ошибок. В общем одинаковых названий не должно быть, иначе ошибок не избежать.