![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
smilemf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 31.12.2007 Репутация: нет Всего: нет |
Здраствуйте.
Значит надобно вывести комментарии вместе с инфой о юзере если он зареган в базе. есть таблица comments со столбцами commentID, comment_author, comment_date, comment_content, user_id и таблица users с полями userID, userLogin итд. comments.user_id = users.userID Задача такая: ЕСЛИ comments.user_id = 0 (это значит что юзер который оставил комментарий не был авторизирован либо зарегистрирован на сайте т.е. в таблице users отсутствуют данные о нём) ВЫБИРАЕМ ТОЛЬКО столбцы commentID, comment_author, comment_date, comment_content ИЗ ТАБЛИЦЫ comments НО ЕСЛИ user_id != 0 (т.е. юзер авторизирован на сайте и значит данные о нём есть в таблице users) ВЫБИРАЕМ столбцы comments.commentID, comments.comment_date, comments.comment_content, users.userID, users.userLogin ИЗ ТАБЛИЦЫ comments и users ГДЕ comments.user_id= users.userID вот это всё надо уместить в один запрос. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
используй UNION, который соединить два запроса в один.
|
|||
|
||||
smilemf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 31.12.2007 Репутация: нет Всего: нет |
skyboy пробовал так
пишет ERROR #1222 : The used SELECT statements have a different number of columns Это сообщение отредактировал(а) skyboy - 12.7.2008, 15:47 |
|||
|
||||
Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 15 Всего: 54 |
Сделайте через Join для всех полей сразу (то есть select по постам + join из пользователей)... Для постов с неавторизованными пользователями получите NULL... А все остальное делается через обработку вывода...
Добавлено через 6 минут и 36 секунд Sorry, не простой JOIN, а LEFT JOIN Добавлено через 7 минут и 10 секунд Что-то типа
-------------------- ![]() |
|||
|
||||
Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 15 Всего: 54 |
smilemf, ну чего замолчал? помогло?
-------------------- ![]() |
|||
|
||||
skyboy |
|
||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
smilemf, ну что же ты :(
пишет: "запросы SELECT должны возвращать одинаковое количество полей". разве не логично? результат запроса - таблица по виду. как может таблица быть "лесенкой": тут два поля, а тут - двадцать два? тебе в одном из запросов не нужны поля, а во втором - должны быть, то вместо полей можешь выводить пустые строки или вообще любые значение. к примеру, так:
но тебе, возможно, придется отличать строки одного подзапроса от строк другого. тогда добавь ещё поле с константным значением:
и потом. у тебя подзапрос
не соответствует условию что такое декартово произведение знаешь? у тебя твой запрос формирует все возможные сочетания каждой записи из comments с каждой записью из users. и потом, когда размещаешь такие длинные запросы - окажи уважение к читающим и отформатируй запрос так, чтоб глаза не ломались. про enter знаем? а про пробел? вот и форматируй так(переносы и отступы), чтоб сходу можно было видеть - что откуда ты берешь. Это сообщение отредактировал(а) skyboy - 12.7.2008, 15:47 |
||||||
|
|||||||
smilemf |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 31.12.2007 Репутация: нет Всего: нет |
решил проблему через LEFT JOIN благодаря совету юзера Kesh.
![]() skyboy, я изучать mysql начал совсем недавно поэтому и допускаю пока такие глупые ошибки, к тому-же ранее не приходилось работать с этой функцией. Спасибо за объяснение насчёт UNION - теперь буду знать ![]() Всем спасибо! ![]() |
|||
|
||||
Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 15 Всего: 54 |
skyboy, грузишь новичка теорией
![]() Не всех же "драли" на зачетах по БД как нас с тобой ![]() Люди могут и не знать, что такое декартово произведение... -------------------- ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
smilemf, не правдывайся, я же не препод
![]() просто я правда не могу понять, как ты ожидал получить результат с разным количеством полей(столбцов) в разных записях(строках) ![]() |
|||
|
||||
Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 15 Всего: 54 |
А тут на самом деле фишка в другом... Я только недавно (когда стал работать в немецкой конторе) стал понимать, что пользователь объясняет задание всегда с точки зрения конечного результата, т.н. Fachkonzept... После этого надо преобразовать его требования к нормальному виду (Technisches Konzept), решить задачу, и объяснить клиенту, что именно это он и хотел получить... В этом случае вопрос был задан из соображений "хочу чтобы выводились определенные поля при определенных условиях" - это Fachkonzept. На самом же деле smilemf не особо важно было как именно это будет реализовано в SELECT... Ему просто нужна была маленькая подсказка, как получить нужные данные для обработки (например в php-скрипте)... А потом он уже и сам дойдет, как это потом все "еще более конечному" пользователю выдать... ВОт за это в немецких конторах и платят большие деньги... ![]() P.S. Крик души... Лежит на столе Fachkonzept на 250+ страниц... надо перевести его в Techn. Konzept, а так влом... (начал HL-2 перепроходить ![]() -------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |