Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Составить запрос / 25 сообщений из 42, страница 1 из 2
09.05.2014, 00:44:15
    #38637312
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Здравствуйте. Помогите пожалуйста составить запрос:

Вот у меня есть таблица test и в ней 2 столбца user1 и user2
Так же есть таблица users.
В user1 и user2 находятся ID юзеров (int). Следуя этому, мне нужно получить с таблицы users по полям user1 и user2 их НИКИ, то есть логины этих пользователей. Понимаю, запрос один из самых простых, но на примере я больше пойму. Если конечно не затруднит, объяснения что к чему не помешали бы... Спасибо
...
Рейтинг: 0 / 0
09.05.2014, 04:34:36
    #38637346
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
AllReady,

Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
  u1.user_name AS name_1,
  u2.user_name AS name_2
from 
  table1 AS tbl
  join users AS u1 on tbl.user1 = u1.user_id
  join users AS u2 on tbl.user2 = u2.user_id
...
Рейтинг: 0 / 0
09.05.2014, 19:46:04
    #38637486
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
javajdbc, спасибо, работает. А нельзя помимо их ников вывести ID этой записи с таблицы test и какое нибудь другое поле, например "who" ?
...
Рейтинг: 0 / 0
09.05.2014, 20:43:11
    #38637504
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Помогите пожалуйста, что тут не так ?
---
select game_characters.zag, battles.id, battles.win
from game_characters
inner join battles on battles.pers1 = game_characters.id
inner join battles on battles.pers2 = game_characters.id
where battles.win is not null
...
Рейтинг: 0 / 0
09.05.2014, 22:22:09
    #38637526
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Блин, сделал сам, и сейчас только понял принцип алиасов в join'ах.
Чувствую себя мега профессионалом :D
...
Рейтинг: 0 / 0
09.05.2014, 22:56:20
    #38637536
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Вот еще проблема с запросом, с которым не могу разобраться...
---
SELECT
"users.login", "users.color", "users.active", "users.vip", "users.pol", "users.last", "users.mavatar",
chat.id, chat.user, chat.time, chat.reply, chat.cit, chat.text, us.id AS userid
FROM chat
INNER JOIN users AS us ON chat.user = us.id
ORDER BY chat.id
---
То есть - это чат. В котором по chat.user выводятся информация о юзере. Когда пишу запрос без двойных ковычек, то есть users.login, users.color и т.д. возникает ошибка:
Unknown column login in field list
Unknown column color in field list
---
А когда пишу запрос с ковычками, выводя через print_r я вижу следующее:
--
Array
(
[users.login] => users.login
[users.color] => users.color
[users.active] => users.active
[users.vip] => users.vip
[users.pol] => users.pol
[users.last] => users.last
[users.mavatar] => users.mavatar
[id] => 7559
[user] => 46
[time] => 1399660730
[reply] => 37
[cit] => 7557
[text] => сообщение
[userid] => 46
)
то есть в двойных ковычках он идет как текст. В чем тут проблема ?
...
Рейтинг: 0 / 0
09.05.2014, 22:57:57
    #38637537
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
AllReadyвозникает ошибка:
Unknown column login in field list
Unknown column color in field listв таблице users нет полей login и color?
...
Рейтинг: 0 / 0
09.05.2014, 23:03:43
    #38637542
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
tanglir, проблема в том, что все на месте. Проверял и регистр и наличие русских букв. Все равно так же...
...
Рейтинг: 0 / 0
09.05.2014, 23:06:07
    #38637544
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
AllReady,

а если заменить все " на `?
...
Рейтинг: 0 / 0
09.05.2014, 23:12:40
    #38637547
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
tanglir, кстати да, пробовал. Так же что и без ковычек вообще. Хочу подметить, когда в FROM добавляю через запятую еще и users, точнее FROM chat, users тогда возникает другая ошибка, что то типа Unknown column ... in on clause
Но хочется понять, почему в первом случае, ни с ковычками, ни без не получается вывести. Я вот запрос который смог сделать, можно сказать аналогичен этому. И все равно что то не выходит...
Рабочий вариант без join'a вот:
SELECT users.login, users.mavatar, users.vip, users.active, users.color, users.pol, users.last, users.id AS users, chat.* FROM chat, users WHERE users.id = chat.user ORDER BY chat.id DESC
...
Рейтинг: 0 / 0
09.05.2014, 23:15:47
    #38637549
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Стоп. Я таки прочитал запрос тут 15996131 . Вы даёте таблице users алиас us, после чего пытаетесь обратиться к полям таблицы по её имени. А надо по алиасу.
...
Рейтинг: 0 / 0
09.05.2014, 23:16:41
    #38637550
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
И что самое смешное, к последнему полю обращение идёт правильное - "us.id AS userid"
...
Рейтинг: 0 / 0
09.05.2014, 23:22:57
    #38637551
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
tanglir, я же таблице users не давал алиаса, а только полю users.id чтоб при выводе ид сообщения и ид юзера не путались. А что конкретно не так ? Я просто учусь только. И вариант с where медленнее join'a ?
...
Рейтинг: 0 / 0
09.05.2014, 23:25:22
    #38637552
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
AllReadyя же таблице users не давал алиасаа это что?
AllReadyFROM chat
INNER JOIN users AS us ON chat.user = us.id

AllReadyИ вариант с where медленнее join'a ?это разные варианты записи одной и той же операции (в случае иннерджойна)
...
Рейтинг: 0 / 0
09.05.2014, 23:28:48
    #38637554
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
tanglir, а, вы про этот ... вы не можете пожалуйста дать вариант с join'ом исправленный ?
...
Рейтинг: 0 / 0
09.05.2014, 23:38:26
    #38637556
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Код: sql
1.
2.
3.
4.
5.
6.
SELECT 
us.login, -- и так далее
chat.id, chat.user, chat.time, chat.reply, chat.cit, chat.text, us.id AS userid
FROM chat
INNER JOIN users AS us ON chat.user = us.id
ORDER BY chat.id
...
Рейтинг: 0 / 0
09.05.2014, 23:40:12
    #38637557
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
tanglir
Код: sql
1.
2.
3.
4.
5.
6.
SELECT 
us.login, -- и так далее
chat.id, chat.user, chat.time, chat.reply, chat.cit, chat.text, us.id AS userid
FROM chat
INNER JOIN users AS us ON chat.user = us.id
ORDER BY chat.id


Спасибо огромное, получилось
...
Рейтинг: 0 / 0
10.05.2014, 00:07:17
    #38637565
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Еще возникла проблема с запросом... Есть таблица голосований voting
---
SELECT * FROM `voting` ORDER BY id DESC
---
Как мне в селекте еще указать количество голосов за этот вариант, то есть voting.id.
Таблица голосов: `voting_golos`, ид голосования: `id_vote`.
...
Рейтинг: 0 / 0
10.05.2014, 00:37:16
    #38637573
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
извините, нашел вариант в интернете и получилось так:
SELECT voting.*, (SELECT COUNT(*) FROM voting_golos WHERE id_vote=voting.id) as count FROM voting
ORDER BY voting.id DESC
...
Рейтинг: 0 / 0
10.05.2014, 10:49:38
    #38637616
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Доброго дня всем :)
У меня проблема возникла с 3м запросом. У меня есть форум. Я хочу вывести 3 последних темы на главной. Их формат таковой:
"Название темы" [количество сообщений] "Ник последнего юзера"
У меня был такой запрос:
Код: sql
1.
SELECT * FROM forum_theme ORDER BY id DESC LIMIT 3


Затем шел цикл, в цикле еще был запрос:
Код: sql
1.
SELECT * FROM forum_komm  WHERE`id_theme`= ".$theme['id']." ORDER BY id DESC LIMIT 3


То есть получаю ИД последнего юзера в теме
Затем сразу же его информацию, ник.
Код: sql
1.
SELECT * FROM `users` WHERE`id`= ".$id['user']."


Это получается цикл, затем 2 запроса сразу же. А так же еще 1 для счетчика сообщений. В общем 3 запроса в цикле .
Понимаю извращение, теперь занимаюсь переделками.
Смог сократить, то есть из цикла смог убрать счетчик сообщений. Получилось следующее:
Код: sql
1.
2.
3.
4.
SELECT 
forum_theme.id, forum_theme.zag, forum_theme.close, forum_theme.zakr, forum_theme.hide,
(SELECT count(*) FROM forum_komm WHERE id_theme = forum_theme.id) AS count
FROM `forum_theme` ORDER BY `uptime` DESC LIMIT 3


Теперь мне нужно в нем же еще получить юзера, то есть ник, исходя из ид юзера который оставил там последнее сообщение.
Так не получается:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
forum_theme.id, forum_theme.zag, forum_theme.close, forum_theme.zakr, forum_theme.hide,
(SELECT count(*) FROM forum_komm WHERE id_theme = forum_theme.id) AS count,
(SELECT id FROM forum_komm WHERE id_theme = forum_theme.id order by `time` DESC) AS count2,
us.id, us.login 
FROM `forum_theme` 
INNER JOIN users AS us ON us.id = count2
ORDER BY `uptime` DESC LIMIT 3


Ошибка следующая: Error Code: 1054. Unknown column 'count2' in 'on clause'. Помогите пожалуйста разобраться...
...
Рейтинг: 0 / 0
10.05.2014, 11:23:30
    #38637628
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Если написать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT 
forum_theme.id, forum_theme.zag, forum_theme.close, forum_theme.zakr, forum_theme.hide,
(SELECT count(*) FROM forum_komm WHERE id_theme = forum_theme.id) AS count,
us.id, us.login 
FROM `forum_theme` 
INNER JOIN users AS us ON us.id = 1
ORDER BY `uptime` DESC LIMIT 3


Запрос работает. Только мне вместо "1" нужно подставить ид юзера последнего сообщения в теме. Почему то такой вариант не подходит:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT 
forum_theme.id, forum_theme.zag, forum_theme.close, forum_theme.zakr, forum_theme.hide,
(SELECT count(*) FROM forum_komm WHERE id_theme = forum_theme.id) AS count,
us.id, us.login 
FROM `forum_theme` 
INNER JOIN users AS us ON us.id IN (SELECT user FROM forum_komm WHERE id_theme = forum_theme.id order by `time` DESC)
ORDER BY `uptime` DESC LIMIT 3


То есть на выходе я получаю ник и ид юзера, а все что связано с темой дублируется. То есть 3 записи имеют одниковый ид, заголовок и т.д.
...
Рейтинг: 0 / 0
14.05.2014, 20:20:57
    #38641507
AllReady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Помогите пожалуйста с запросом выше... Никак не получается...
...
Рейтинг: 0 / 0
19.05.2014, 14:10:03
    #38645182
Sanjar88
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Так и должно быть, как вы себе представляете вывод такого запроса ?
...
Рейтинг: 0 / 0
19.05.2014, 17:27:27
    #38645516
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT t.id, t.zag, t.close, t.zakr, t.hide, t.qty, us.id, us.`login`
FROM (
   SELECT t.*, count(*)qty, max(k.id)kid -- max(k.`time`) `time` ??
   FROM(
      SELECT t.id, t.zag, t.close, t.zakr, t.hide
      FROM forum_theme t
      ORDER BY t.id DESC 
      LIMIT 3
      )t
   JOIN forum_komm k ON k.id_theme = t.id 
   )t
JOIN forum_komm k ON k.id=t.kid
   -- ON k.id_theme = t.id AND k.`time`=t.`time` и нет одновременных ??
JOIN `users` us ON us.id = k.`user`;
...
Рейтинг: 0 / 0
19.05.2014, 17:29:02
    #38645520
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составить запрос
Забыл группирровку, сорь)
Cygapb-007примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT t.id, t.zag, t.close, t.zakr, t.hide, t.qty, us.id, us.`login`
FROM (
   SELECT t.*, count(*)qty, max(k.id)kid -- max(k.`time`) `time` ??
   FROM(
      SELECT t.id, t.zag, t.close, t.zakr, t.hide
      FROM forum_theme t
      ORDER BY t.id DESC 
      LIMIT 3
      )t
   JOIN forum_komm k ON k.id_theme = t.id 
   GROUP BY t.id
   )t
JOIN forum_komm k ON k.id=t.kid
   -- ON k.id_theme = t.id AND k.`time`=t.`time` и нет одновременных ??
JOIN `users` us ON us.id = k.`user`;
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Составить запрос / 25 сообщений из 42, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]