как создать сложный запрос попроще?

12
verhmax
На сайте с 01.12.2005
Offline
191
936

добрый день. есть таблица. в нет поля пользователей со значениями года рождения.

как задать запрос, чтоб вывести только те года, которые есть у пользователей. тоесть мне все года к примеру с 1900 по 2000 не нужны, надо только года, в которых есть пользователь. вывести просто список годов.

Dreammaker
На сайте с 20.04.2006
Offline
569
#1

Ну без самой таблицы трудновато, но потелепатировать можно

SELECT DISTINCT year FROM users;

verhmax
На сайте с 01.12.2005
Offline
191
#2

о, класс!!! спасибо!!! а я думал както крутить перебором, но подумал что нагрузка будет огромедная:)

[Удален]
#3

не забудь индекс по полю year поставить, а то как ты сказал нагрузка будет огроменная ))))))

DR
На сайте с 18.08.2007
Offline
59
#4
мне все года к примеру с 1900 по 2000 не нужны

SELECT year FROM table

выдаст только те года, в которых есть пользователи.

А чтобы убрать дублирующие года: как написал Dreammaker или

SELECT year FROM table WHERE 1 GROUP BY year

DenisR добавил 10.06.2008 в 23:21

bearman, индекс не спасёт. Надо бы временную табличку создавать с промежуточными данными... 😂

Com2b.ru - профессиональное создание Интернет-сайтов (http://www.com2b.ru). Ufa-host.ru - лучший хостинг поволжья и урала (http://www.ufa-host.ru).
[Удален]
#5

explain SELECT distinct years.`year` FROM `years`;

1 SIMPLE years range year 21 7 Using index for group-by

я бы поспорил ;)

bearman добавил 10.06.2008 в 23:33

-- Table "years" DDL

CREATE TABLE `years` (

`year` char(20) collate latin1_general_ci default NULL,

KEY `year` (`year`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

Skaizer
На сайте с 11.08.2007
Offline
104
#6

Вообще, если есть возможность использовать хранимые процедуры (MySQL 5), то лучше сделайте через них, в итоге будет всего 1 запрос, этого можно добиться в любом случае, а все остальные логические операции будут происходить внутри MySQL сервера.

Размножение статей, уник до 100%, от 11$/1000 символов. Статьи индексируются Яндексом. (/ru/forum/439355)
Dreammaker
На сайте с 20.04.2006
Offline
569
#7
Skaizer:
всего 1 запрос
Skaizer:
все остальные логические операции

Это вы о чём? :)

Skaizer
На сайте с 11.08.2007
Offline
104
#8

Это я об обращении к серверу БД. А логические операции выполнит хранимая процедура.

Dreammaker
На сайте с 20.04.2006
Offline
569
#9

Skaizer, это понятно. Но какой смысл в данном конкретном случае использовать процедуры, триггеры и т.д.?

DR
На сайте с 18.08.2007
Offline
59
#10
Dreammaker:
Skaizer, это понятно. Но какой смысл в данном конкретном случае использовать процедуры, триггеры и т.д.?

Думаю, что в данном конкретном случае (при малом количестве запросов) пока рано говорить о переходе на Oracle с PL/SQL. MsSQL с триггерами должно вполне хватить на первое время.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий