Объединить 2 таблицы для запроса SELECT? - PullRequest
4 голосов
/ 15 июля 2009

Сначала .. вот две таблицы, которые я создал (без ненужных столбцов) ..

CREATE TABLE users_history1 (
  circuit tinyint(1) unsigned NOT NULL default '0',
  userh_season smallint(4) unsigned NOT NULL default '0',
  userh_userid int(11) unsigned NOT NULL default '0',
  userh_rank varchar(2) NOT NULL default 'D',
  userh_wins int(11) NOT NULL default '0',
  userh_losses int(11) NOT NULL default '0',
  userh_points int(11) NOT NULL default '1000',
  KEY (circuit, userh_userid),
  KEY (userh_season)
) ENGINE=MyISAM;

CREATE TABLE users_ladders1 (
  circuit tinyint(1) unsigned NOT NULL default '0',
  userl_userid int(11) unsigned NOT NULL default '0',
  userl_rank char(2) NOT NULL default 'D',
  userl_wins smallint(3) NOT NULL default '0',
  userl_losses smallint(3) NOT NULL default '0',
  userl_points smallint(4) unsigned NOT NULL default '1000',
  PRIMARY KEY (circuit, userl_userid),
  KEY (userl_userid)
) ENGINE=MyISAM;

Некоторые предыстории ... в этих таблицах содержатся данные о соревновательной лестнице, где игроки сравниваются друг с другом в упорядоченном зачетном положении. users_history1 - это таблица, которая содержит записи, хранящиеся в предыдущих сезонах. users_ladders1 содержит записи текущего сезона. Я пытаюсь создать страницу на своем сайте, где игроки ранжируются по средним баллам их предыдущих записей и текущей записи. Вот основные положения для лестницы 1 на 1: http://vilegaming.com/league.x/standings1/3

Я хочу выбрать из базы данных из двух таблиц упорядоченный список игроков в зависимости от их среднего балла из записей users_ladders1 и users_history1. Я действительно понятия не имею, как выбрать одну из двух таблиц в одном запросе, но я постараюсь, как можно более подробно, проиллюстрировать это ..

Использование дефисов во всех примерах, поскольку SO делает это странным.

SELECT userh-points 
FROM users-history1 
GROUP BY userh-userid 
ORDER BY (total userh-points for the user)

Требуется GROUP BY, поскольку некоторые игроки могли играть в нескольких предыдущих сезонах.

SELECT userl-points 
FROM users-ladders1 
ORDER BY userl-points

Я хочу иметь возможность комбинировать обе таблицы в запросе, чтобы я мог получать данные в виде строк, упорядоченных по общему количеству очков, и, если это возможно, также делить общее количество очков на количество уникальных записей для игрока, чтобы я мог получить среднее значение.

Ответы [ 3 ]

15 голосов
/ 15 июля 2009

Вы захотите использовать UNION SELECT :

SELECT p.id, COUNT(p.id), SUM(p.points)
FROM (SELECT userh_userid AS id, userh_points AS points
      FROM users_history1
      UNION SELECT userl_userid, userl_points
      FROM users_ladders1) AS p
GROUP BY p.id

Подзапрос является важной частью. Это даст вам одну таблицу с результатами как текущих, так и исторических таблиц вместе взятых. Затем вы можете выбрать из этой таблицы и сделать COUNT и SUM, чтобы получить ваши средние.

Мой синтаксис MySQL довольно ржавый, поэтому, пожалуйста, извините. У меня не было шанса запустить это, поэтому я даже не уверен, что это выполняется, но этого должно быть достаточно, чтобы вы начали.

2 голосов
/ 17 марта 2012

Если вы хотите объединить таблицу, и вы хотите выбрать определенный столбец из одной таблицы, а в другой таблице хотите выбрать все.

, например

Table name = test1 , test2

запрос:

SELECT test1.column1,test1.column2, test2.* FROM test1 ,test2

, если вы хотите объединить с конкретным столбцом

запрос:

SELECT test1.column1,test1.column2, test2.* FROM test1 ,test2 where test2.column3='(what ever condition u want to pass)'
0 голосов
/ 31 мая 2012
Select col1 from test1 where id = '1'
union 
select * from table2 

этот также можно использовать для присоединения к таблицам.

...