Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выручайте плиз!! / 2 сообщений из 2, страница 1 из 1
05.11.2013, 00:16:26
    #38452391
wertuyoz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выручайте плиз!!
SQL
Есть таблица пользователей
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE `users` (
  `user_id` int(11) NOT NULL default '0',
  `birthday` date NOT NULL default '0000-00-00',
  `nickname` char(32) NOT NULL default '',
  `password` char(32) NOT NULL default '',
  PRIMARY KEY  (`user_id`)
)

Необходимо написать два SQL запроса. Первый SQL запрос должен заполнить таблицу данными (например 500000 записей) с произвольно
(или случайно) распределенными датами рождения (наример с 01.01.1950 до 31.12.1995), в том числе и нулевыми (0000-00-00).
Использование процедур не допускается.

Второй SQL запрос должен возвращать информацию о 5-ти ближайших днях рождения пользователей.

Результат запроса должен содержать поля

`user_id`,
`nickname`,
`day_of_birth` - день рождения (число),
`month_of_birth` - месяц рождения (число),
`age` - достигаемый возраст (число).

Ближайший день рождения должен следовать первым в результирующем наборе данных.
...
Рейтинг: 0 / 0
05.11.2013, 07:06:09
    #38452492
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выручайте плиз!!
имен у нас нету поэтому их тоже генерим
d1 и d2 это начало и окончание "отчетного периода"

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SET @d1 = '1950-01-01';
SET @d2 = '1995-12-31';

-- SELECT  DATE_ADD(@d1,INTERVAL DATEDIFF(@d2,@d1)* RAND() DAY)  ;

INSERT INTO users (user_id,nickname,birthday)
SELECT @ui:=@ui+1,u.*
FROM(SELECT @ui:=0) AS q,(SELECT nickname,(SELECT  DATE_ADD(@d1,INTERVAL DATEDIFF(@d2,@d1)* RAND() DAY)) AS  birthday
  FROM (SELECT CONCAT(t1.s,t2.s,t3.s,t4.s,t5.s) AS nickname
FROM (SELECT 'a' AS s UNION SELECT 'b'  UNION SELECT 'c'  UNION SELECT 'd'  UNION SELECT 'f'  UNION SELECT 'g'  UNION SELECT 'h'  UNION SELECT 'i'  UNION SELECT 'k'  UNION SELECT 'l'  UNION SELECT 'm'  UNION SELECT 'n' UNION SELECT 'o' UNION SELECT 'p' UNION SELECT 'q' UNION SELECT 'r' UNION SELECT 's' UNION SELECT 't' UNION SELECT 'u' UNION SELECT 'v' UNION SELECT 'w' UNION SELECT 'x' UNION SELECT 'y' UNION SELECT 'z' ORDER BY RAND()) AS t1 ,
  (SELECT 'a' AS s UNION SELECT 'b'  UNION SELECT 'c'  UNION SELECT 'd'  UNION SELECT 'f'  UNION SELECT 'g'  UNION SELECT 'h'  UNION SELECT 'i'  UNION SELECT 'k'  UNION SELECT 'l'  UNION SELECT 'm'  UNION SELECT 'n' UNION SELECT 'o' UNION SELECT 'p' UNION SELECT 'q' UNION SELECT 'r' UNION SELECT 's' UNION SELECT 't' UNION SELECT 'u' UNION SELECT 'v' UNION SELECT 'w' UNION SELECT 'x' UNION SELECT 'y' UNION SELECT 'z' ORDER BY RAND()) AS t2,
  (SELECT 'a' AS s  UNION SELECT 'b'  UNION SELECT 'c'  UNION SELECT 'd'  UNION SELECT 'f'  UNION SELECT 'g'  UNION SELECT 'h'  UNION SELECT 'i'  UNION SELECT 'k'  UNION SELECT 'l'  UNION SELECT 'm'  UNION SELECT 'n' UNION SELECT 'o' UNION SELECT 'p' UNION SELECT 'q' UNION SELECT 'r' UNION SELECT 's' UNION SELECT 't' UNION SELECT 'u' UNION SELECT 'v' UNION SELECT 'w' UNION SELECT 'x' UNION SELECT 'y' UNION SELECT 'z' ORDER BY RAND()) AS t3,
  (SELECT 'a' AS s  UNION SELECT 'b'  UNION SELECT 'c'  UNION SELECT 'd'  UNION SELECT 'f'  UNION SELECT 'g'  UNION SELECT 'h'  UNION SELECT 'i'  UNION SELECT 'k'  UNION SELECT 'l'  UNION SELECT 'm'  UNION SELECT 'n' UNION SELECT 'o' UNION SELECT 'p' UNION SELECT 'q' UNION SELECT 'r' UNION SELECT 's' UNION SELECT 't' UNION SELECT 'u' UNION SELECT 'v' UNION SELECT 'w' UNION SELECT 'x' UNION SELECT 'y' UNION SELECT 'z' ORDER BY RAND()) AS t4 ,
 (SELECT 'a' AS s  UNION SELECT 'b'  UNION SELECT 'c'  UNION SELECT 'd'  UNION SELECT 'f'  UNION SELECT 'g'  UNION SELECT 'h'  UNION SELECT 'i'  UNION SELECT 'k'  UNION SELECT 'l'  UNION SELECT 'm'  UNION SELECT 'n' UNION SELECT 'o' UNION SELECT 'p' UNION SELECT 'q' UNION SELECT 'r' UNION SELECT 's' UNION SELECT 't' UNION SELECT 'u' UNION SELECT 'v' UNION SELECT 'w' UNION SELECT 'x' UNION SELECT 'y' UNION SELECT 'z' ORDER BY RAND()) AS t5 
  LIMIT 500000) AS n)u;


тут несколько символов нехватает, сам добавишь.
ну и вывод:
Код: sql
1.
2.
3.
4.
5.
SELECT u.nickname,u.birthday,DAY(u.birthday) day_of_birth,MONTH(u.birthday) month_of_birth,
 ABS(YEAR(birthday)-YEAR(CURDATE()))-IF(DAYOFYEAR(u.birthday)<=DAYOFYEAR(CURDATE()),0,1) AS age  
FROM users u 
ORDER BY ABS(DATEDIFF(birthday,'1978-11-02')) 
LIMIT 5; 
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выручайте плиз!! / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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