Вопросы по MySQL

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #1
Понадобилось в плагине выбрать несколько значений из разных таблиц одним запросом.

Имеется:
n кол-во таблиц: table_1, table_2, ..., table_n.
m кол-во столбцов: column_1, column_2, ..., column_m.

Нужно выбрать из нескольких таблиц значения разных столбцов.

Что-то вроде:
PHP:
SELECT `table_1`.`column_1`, `table_1`.`column_2`, `table_2`.`column_1`, `table_2`.`column_2` FROM ... WHERE ..

Как это правильней и оптимальней сделать?
 
Последнее редактирование:

NagarD

Участник
Сообщения
411
Реакции
184
Re: Несколько Select запросов в одном.

join
 

Хитрый_Ёжик

Участник
Сообщения
287
Реакции
111
Re: Несколько Select запросов в одном.

R1KO, не помешала бы реальная или, хотя бы, примерная структура... Либо JOIN, либо UNION. Зависит от задачи.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
Re: Несколько Select запросов в одном.

3cd6250057.jpg


Вот нужно из всех 3-х таблиц выбрать по несколько полей, при чем с разными условиями.
 

Vaio

Участник
Сообщения
625
Реакции
215
Re: Несколько Select запросов в одном.

Если джоинить никак, то лучше сделай 3 запроса.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6
Re: Несколько Select запросов в одном.

Vaio, в том то и дело что всё должно быть одним запросом.
 

Argonavt

Участник
Сообщения
34
Реакции
8
Re: Несколько Select запросов в одном.

R1KO, у этих таблицах есть что-то общее? id , ip, name , steam_id например? Для обьедениния, необходимо связующее звено, оно существует? Без более подробной структуры мы вряд ли сможем тебе помочь.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #8
Re: Несколько Select запросов в одном.

Argonavt, это таблицы sourcebans
Мне нужно по ид бана выбрать всего его поля + ник админа (по aid) + ип:порт сервера (по sid) + количество банов + количество блокировок.

Вот была наработка, но не работает запрос:
PHP:
FormatEx(sQuery, sizeof(sQuery), "SELECT `name`, \
											`authid`, \
											`ip`, \
											`created`, \
											`length`, \
											`ends`, \
											`reason`, \
											(SELECT `user` FROM `%s_admins` WHERE `aid` = '%i'), \
											(SELECT `ip`, `port` FROM `%s_servers` WHERE `sid` = '%i'), \
											(SELECT COUNT(*) FROM `%s_bans` WHERE `authid` = '%s'), \
											(SELECT COUNT(*) FROM `%s_banlog` WHERE `bid` = '%i') \
											FROM `%s_bans` WHERE `bid` = '%i';",
											DatabasePrefix,
											iAID,
											DatabasePrefix,
											iSID,
											DatabasePrefix,
											sAuth,
											DatabasePrefix,
											iBID,
											DatabasePrefix,
											iBID);

Вопрос задавал в общем виде т.к. еще нужно для других нужд.
 

Argonavt

Участник
Сообщения
34
Реакции
8
Re: Несколько Select запросов в одном.

SELECT * FROM sb_bans ban
LEFT JOIN sb_admins adm ON ban.aid = adm.aid
LEFT JOIN sb_servers srv ON ban.sid = srv.sid
LEFT JOIN (SELECT count(*) blocCounts, bid FROM sb_banlog log GROUP BY bid) countBlocks ON countBlocks.bid = ban.bid
LEFT JOIN (SELECT count(*) banCounts, authid FROM sb_bans bans GROUP BY authid) counBans ON counBans.authid = ban.authid
WHERE ban.bid = 666

Вот что-то примерное на чистом SQL
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #10
Re: Несколько Select запросов в одном.

Argonavt, проверю - отпишусь
 

NagarD

Участник
Сообщения
411
Реакции
184
Re: Несколько Select запросов в одном.

Argonavt, это таблицы sourcebans
Мне нужно по ид бана выбрать всего его поля + ник админа (по aid) + ип:порт сервера (по sid) + количество банов + количество блокировок.

Вот была наработка, но не работает запрос:
PHP:
FormatEx(sQuery, sizeof(sQuery), "SELECT `name`, \
											`authid`, \
											`ip`, \
											`created`, \
											`length`, \
											`ends`, \
											`reason`, \
											(SELECT `user` FROM `%s_admins` WHERE `aid` = '%i'), \
											(SELECT `ip`, `port` FROM `%s_servers` WHERE `sid` = '%i'), \
											(SELECT COUNT(*) FROM `%s_bans` WHERE `authid` = '%s'), \
											(SELECT COUNT(*) FROM `%s_banlog` WHERE `bid` = '%i') \
											FROM `%s_bans` WHERE `bid` = '%i';",
											DatabasePrefix,
											iAID,
											DatabasePrefix,
											iSID,
											DatabasePrefix,
											sAuth,
											DatabasePrefix,
											iBID,
											DatabasePrefix,
											iBID);

Вопрос задавал в общем виде т.к. еще нужно для других нужд.

Подзапрос должен возвращать только один результат, ну и нужны псевдо.

PHP:
FormatEx(sQuery, sizeof(sQuery), "SELECT `name`, \
                                            `authid`, \
                                            `ip`, \
                                            `created`, \
                                            `length`, \
                                            `ends`, \
                                            `reason`, \
                                            (SELECT `user` FROM `%s_admins` WHERE `aid` = '%i') as admin_user, \
                                            (SELECT `ip`FROM `%s_servers` WHERE `sid` as = '%i') as server_ip, \
                                            (SELECT `port` FROM `%s_servers` WHERE `sid` as = '%i') as server_port, \
                                            (SELECT COUNT(*) FROM `%s_bans` WHERE `authid` = '%s') as bans_count, \
                                            (SELECT COUNT(*) FROM `%s_banlog` WHERE `bid` = '%i') as banlog_count \
                                            FROM `%s_bans` WHERE `bid` = '%i';",
                                            DatabasePrefix,
                                            iAID,
                                            DatabasePrefix,
                                            iSID,
                                            DatabasePrefix,
                                            iSID,
                                            DatabasePrefix,
                                            sAuth,
                                            DatabasePrefix,
                                            iBID,
                                            DatabasePrefix,
                                            iBID);
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #13
Кто часто работает с базами из-под плагинов, как решить проблемы с кодировкой?
После коннекта к базе установка кодировки 1 раз не помогает. Ставить её перед каждым запросом что-ли?
 

semjef

semjef.ru
Сообщения
993
Реакции
444
"Это маааагия" - вот что я ору, когда пропадают проблемы с кодировкой.
 

komashchenko

Идиот
Сообщения
916
Реакции
2,570
Я и перед каждым запросом ставил кодировку но оно все равно не помогало, но точно знаю что если в базе по умолчанию нужная кодировка то все норм - хотя это и так понятно :)
 
Сверху Снизу