Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Неправильное имя столбца? / 25 сообщений из 26, страница 1 из 2
25.10.2014, 17:56:53
    #38787277
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Привет всем! Написал процедуру, но в 9-ой строчке появляется ошибка (это последняя строчка в объявлении процедуры - со столбцом "1"). В чем проблема?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DELIMITER //
CREATE PROCEDURE find_frequency_distrtibution ()
BEGIN
	CREATE TEMPORARY TABLE distribution(
		date DATETIME NOT NULL,
		adnest_name VARCHAR(306) NOT NULL,
		adnest_external_id VARCHAR(75) NOT NULL,
		adnest_id BIGINT(11) NOT NULL  DEFAULT 0,
		ratio DEMICAL(1,8) NOT NULL DEFAULT 0.00000000,
		average DEMICAL(10,2) NOT NULL DEFAULT 0.00,
		effective_adnest_id VARCHAR(75) NOT NULL,
		'1' INTEGER NOT NULL DEFAULT 0,
	........
END;//
...
Рейтинг: 0 / 0
25.10.2014, 18:42:09
    #38787288
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Кавычка не та...
...
Рейтинг: 0 / 0
25.10.2014, 18:47:00
    #38787290
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
я уже пробовал ставить двойные - косяк остается..
...
Рейтинг: 0 / 0
25.10.2014, 19:19:35
    #38787298
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
...
Рейтинг: 0 / 0
25.10.2014, 19:23:55
    #38787299
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
В любом случае, не рекомендую такие имена полей использовать.
Нужно добавить спереди какой-то символ-не цифру.
Букву или подчёркивание.
...
Рейтинг: 0 / 0
25.10.2014, 19:26:12
    #38787300
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
На удивление, обратные ковычки подошли.. спасибо Alex_Ustinov
...
Рейтинг: 0 / 0
25.10.2014, 19:46:12
    #38787305
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
на здоровье, только запомните о чем говорил выше MasterZiv,
использование таких полей предполагает теперь практически постоянное заключение имени поля в такие обратные кавычки,
после кувырканий с такими именами вы скоре придете к выводу ,что проще все-таки называть поля более благозвучно...
`1` = POLE1 = VASJA1 = PETJA1 = IWANT1 во избежание недоразумений...
...
Рейтинг: 0 / 0
25.10.2014, 19:48:13
    #38787307
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Я понимаю, просто создаваемая табличка содержит некоторое распределение. Так вот эта самая единица "1" - это значение по абсциссе.
...
Рейтинг: 0 / 0
25.10.2014, 19:53:55
    #38787309
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
так назовите так
Код: sql
1.
'RASPRED' INTEGER NOT NULL DEFAULT 0
...
Рейтинг: 0 / 0
25.10.2014, 19:56:30
    #38787311
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
без кавычек конечно...
RASPRED INTEGER NOT NULL DEFAULT 0
или весь смысл в том, что в названии были кавычки...?
...
Рейтинг: 0 / 0
25.10.2014, 19:58:09
    #38787312
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Код: sql
1.
'RASPRED' INTEGER NOT NULL DEFAULT 0


Распределение хранится не в столбце с названием "1". "1" - это только один столбец гистограммы. Точно так же в таблице есть "2", "3" и т.д.
...
Рейтинг: 0 / 0
25.10.2014, 20:12:43
    #38787318
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
вы уверены, что вам нужна именно такая структура??? в корне не правильно, как мне кажется...
x,y,z так и хранят
CREATE tablexyz (
id INT AUTOINCREMENT,
nm char(),
dt DATETIME,
x INTEGER NOT NULL DEFAULT 0,
y INTEGER NOT NULL DEFAULT 0,
z INTEGER NOT NULL DEFAULT 0)
...
Рейтинг: 0 / 0
25.10.2014, 20:34:19
    #38787322
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Да, страктура именно такая нужна. Хранится частотная гистограмма. Пример здесь - http://www.inventech.ru/pic/methods-10.gif
...
Рейтинг: 0 / 0
25.10.2014, 20:42:28
    #38787323
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Стас0н,

ну, если вы можете на 146% гарантировать, что количество этих полей не изменится и что они представляют собой "атомарные" данные, то можно и так.
...
Рейтинг: 0 / 0
25.10.2014, 20:47:31
    #38787324
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Еще возникает трудность с занесением значений в поля. Вот тот же запрос, только больше кода привожу:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
DELIMITER //
CREATE PROCEDURE find_frequency_distrtibution ()
BEGIN
	CREATE TEMPORARY TABLE distribution(
		date DATETIME NOT NULL,
		adnest_name VARCHAR(306) NOT NULL,
		adnest_external_id VARCHAR(75) NOT NULL,
		adnest_id BIGINT(11) NOT NULL  DEFAULT 0,
		ratio DEMICAL(1,8) NOT NULL DEFAULT 0.00000000,
		average DEMICAL(10,2) NOT NULL DEFAULT 0.00,
		effective_adnest_id VARCHAR(75) NOT NULL,
		`1` BIGINT(10) NOT NULL DEFAULT 0,
		`2` BIGINT(10) NOT NULL DEFAULT 0,
		`3` BIGINT(10) NOT NULL DEFAULT 0,
		`4` BIGINT(10) NOT NULL DEFAULT 0,
		`5` BIGINT(10) NOT NULL DEFAULT 0,
		`6` BIGINT(10) NOT NULL DEFAULT 0,
		`7` BIGINT(10) NOT NULL DEFAULT 0,
		`8` BIGINT(10) NOT NULL DEFAULT 0,
		`9` BIGINT(10) NOT NULL DEFAULT 0,
		`10` BIGINT(10) NOT NULL DEFAULT 0,
		`11-20` BIGINT(10) NOT NULL DEFAULT 0,
		`21-30` BIGINT(10) NOT NULL DEFAULT 0,
		`31-40` BIGINT(10) NOT NULL DEFAULT 0,
		`41-50` BIGINT(10) NOT NULL DEFAULT 0,
		`51-60` BIGINT(10) NOT NULL DEFAULT 0,
		`61-70` BIGINT(10) NOT NULL DEFAULT 0,
		`71-80` BIGINT(10) NOT NULL DEFAULT 0,
		`81-90` BIGINT(10) NOT NULL DEFAULT 0,
		`91-100` BIGINT(10) NOT NULL DEFAULT 0,
		`101-150` BIGINT(10) NOT NULL DEFAULT 0,
		`151-200` BIGINT(10) NOT NULL DEFAULT 0,
		`201-250` BIGINT(10) NOT NULL DEFAULT 0,
		`251-300` BIGINT(10) NOT NULL DEFAULT 0,
		`>300` BIGINT(10) NOT NULL DEFAULT 0
	);
	SELECT hist_from_dt FROM parameters WHERE param_id=`1` INTO @start;
	set @end := adddate(@start, interval 10 day);
	WHILE @start < @end DO
		INSERT INTO distribution
		(
			date,
			adnest_name,
			adnest_external_id,
			adnest_id,
			ratio,
			average,
			effect_adnest_id,
			`1`,
			`2`,
			`3`,
			`4`,
			`5`,
			`6`,
			`7`,
			`8`,
			`9`,
			`10`,
			`11-20`,
			`21-30`,
			`31-40`,
			`41-50`,
			`51-60`,
			`61-70`,
			`71-80`,
			`81-90`,
			`91-100`,
			`101-150`,
			`151-200`,
			`201-250`,
			`251-300`,
			`>300`	
		)
		VALUES(
			SELECT 
                 ................



Проблема возникает в строчке с "VALUES( SELECT....)"
...
Рейтинг: 0 / 0
25.10.2014, 20:55:47
    #38787326
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Стас0нПроблема возникает в строчке с "VALUES( SELECT....)"потому что не надо изобретать свой синтаксис - там либо валуес, либо селект
...
Рейтинг: 0 / 0
27.10.2014, 13:57:55
    #38788173
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Возникает ошибка:
Код: sql
1.
unknown column '1' in where clause



С чем это может быть связано?

Вот весь запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
DELIMITER //
CREATE PROCEDURE find_frequency_distrtibution ()
BEGIN
	CREATE TEMPORARY TABLE distribution(
		date DATETIME NOT NULL,
		adnest_name VARCHAR(306) NOT NULL,
		adnest_external_id VARCHAR(75) NOT NULL,
		adnest_id INTEGER NOT NULL  DEFAULT 0,
		ratio DOUBLE NOT NULL DEFAULT 0.0,
		average DOUBLE NOT NULL DEFAULT 0.0,
		effective_adnest_id VARCHAR(75) NOT NULL,
		`1` INTEGER NOT NULL DEFAULT 0,
		`2` INTEGER NOT NULL DEFAULT 0,
		`3` INTEGER NOT NULL DEFAULT 0,
		`4` INTEGER NOT NULL DEFAULT 0,
		`5` INTEGER NOT NULL DEFAULT 0,
		`6` INTEGER NOT NULL DEFAULT 0,
		`7` INTEGER NOT NULL DEFAULT 0,
		`8` INTEGER NOT NULL DEFAULT 0,
		`9` INTEGER NOT NULL DEFAULT 0,
		`10` INTEGER NOT NULL DEFAULT 0,
		`11-20` INTEGER NOT NULL DEFAULT 0,
		`21-30` INTEGER NOT NULL DEFAULT 0,
		`31-40` INTEGER NOT NULL DEFAULT 0,
		`41-50` INTEGER NOT NULL DEFAULT 0,
		`51-60` INTEGER NOT NULL DEFAULT 0,
		`61-70` INTEGER NOT NULL DEFAULT 0,
		`71-80` INTEGER NOT NULL DEFAULT 0,
		`81-90` INTEGER NOT NULL DEFAULT 0,
		`91-100` INTEGER NOT NULL DEFAULT 0,
		`101-150` INTEGER NOT NULL DEFAULT 0,
		`151-200` INTEGER NOT NULL DEFAULT 0,
		`201-250` INTEGER NOT NULL DEFAULT 0,
		`251-300` INTEGER NOT NULL DEFAULT 0,
		`>300` INTEGER NOT NULL DEFAULT 0
	);
	SELECT hist_from_dt FROM parameters WHERE param_id=`1` INTO @start;
	set @end := adddate(@start, interval 10 day);
	WHILE @start < @end DO
		INSERT INTO distribution
		(
			date,
			adnest_name,
			adnest_external_id,
			adnest_id,
			ratio,
			average,
			effective_adnest_id,
			`1`,
			`2`,
			`3`,
			`4`,
			`5`,
			`6`,
			`7`,
			`8`,
			`9`,
			`10`,
			`11-20`,
			`21-30`,
			`31-40`,
			`41-50`,
			`51-60`,
			`61-70`,
			`71-80`,
			`81-90`,
			`91-100`,
			`101-150`,
			`151-200`,
			`201-250`,
			`251-300`,
			`>300`
		)
		SELECT 
		@start,
		v_adnests.name,
		v_adnests.external_id,
		tab3.*		
		FROM v_adnests
		JOIN
		(
			SELECT 
				adnest_mapping_composite.adnest_id, 
				adnest_mapping_composite.ratio,
				aver.average as average,
				tab2.*
			FROM adnest_mapping_composite
			JOIN 
			(
				SELECT 
					tab.adnest_id as effective_adnest_id,
					SUM(tab.frequency = 1) AS "1",
					SUM(tab.frequency = 2) AS "2",
					SUM(tab.frequency = 3) AS "3",
					SUM(tab.frequency = 4) AS "4",
					SUM(tab.frequency = 5) AS "5",
					SUM(tab.frequency = 6) AS "6",
					SUM(tab.frequency = 7) AS "7",
					SUM(tab.frequency = 8) AS "8",
					SUM(tab.frequency = 9) AS "9",
					SUM(tab.frequency = 10) AS "10",
					SUM(tab.frequency between 11 and 20) AS "11-20",
					SUM(tab.frequency between 21 and 30) AS "21-30",
					SUM(tab.frequency between 31 and 40) AS "31-40",
					SUM(tab.frequency between 41 and 50) AS "41-50",
					SUM(tab.frequency between 51 and 60) AS "51-60",
					SUM(tab.frequency between 61 and 70) AS "61-70",
					SUM(tab.frequency between 71 and 80) AS "71-80",
					SUM(tab.frequency between 81 and 90) AS "81-90",
					SUM(tab.frequency between 91 and 100) AS "91-100",
					SUM(tab.frequency between 101 and 150) AS "101-150",
					SUM(tab.frequency between 151 and 200) AS "151-200",
					SUM(tab.frequency between 201 and 250) AS "201-250",
					SUM(tab.frequency between 251 and 300) AS "251-300",
					SUM(tab.frequency > 300) AS ">300"
				FROM
				(
					SELECT 
						adnest_id, 
						visitor_id, 
						SUM(num) AS frequency
					FROM hist_impressions
					INNER JOIN timeslot t ON t.timeslot_id = hist_impressions.timeslot_id
					WHERE start_date BETWEEN @start AND ADDDATE(@start, INTERVAL 7 DAY)
					GROUP BY adnest_id, visitor_id
				) tab
				GROUP BY 
					tab.adnest_id
			) tab2
			ON tab2.effective_adnest_id = adnest_mapping_composite.effective_adnest_id
			JOIN 
			(
				SELECT 
					adnest_id AS effective_adnest_id,
					SUM(num) as impressions_sum,
					COUNT(DISTINCT visitor_id) as distinct_visitors,
					SUM(num)/COUNT(DISTINCT visitor_id) as average
				FROM hist_impressions
				INNER JOIN timeslot t ON t.timeslot_id = hist_impressions.timeslot_id
				WHERE start_date BETWEEN @start AND ADDDATE(@start, INTERVAL 7 DAY)
				GROUP BY adnest_id
			) aver
			ON aver.effective_adnest_id = adnest_mapping_composite.effective_adnest_id
		) tab3
		ON tab3.adnest_id = v_adnests.adnest_id
		limit 5;
		SET @start := ADDDATE(@start, INTERVAL 7 DAY);
	END WHILE;
	SELECT * FROM distribution;
END;//

CALL find_frequency_distrtibution();
...
Рейтинг: 0 / 0
27.10.2014, 14:09:48
    #38788193
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Стас0нРаспределение хранится не в столбце с названием "1". "1" - это только один столбец гистограммы. Точно так же в таблице есть "2", "3" и т.д.
Ну так добавьте ВСЕМ столбцам вменяемый префикс (скажем, histogram_1, histogram_2, etc.). Зачем раскладывать по огороду дополнительные грабли?
...
Рейтинг: 0 / 0
27.10.2014, 14:42:53
    #38788255
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
дело в том, что нужны именно такие названия столбцов
...
Рейтинг: 0 / 0
27.10.2014, 14:52:43
    #38788266
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Код: sql
1.
...WHERE param_id=`1`...


данные обратные кавычки используются только для определения "столбцов" и таблиц и.т.д.
SELECT FROM `МОЯБАЗА`.`МОЯТАБЛ`.`МОЕ ПООЛЕ`

в остальных случаях используйте обычные кавычки _'_ или _"_
...
Рейтинг: 0 / 0
27.10.2014, 14:55:57
    #38788273
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
спасибо, не заметил...
...
Рейтинг: 0 / 0
27.10.2014, 15:10:55
    #38788295
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
MySQL достаточно хорошо информирует об ошибках, достаточно найти первое вхождение фразы в ошибке...
так что никогда не паникуйте...
...
Рейтинг: 0 / 0
27.10.2014, 15:27:23
    #38788325
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Стас0нНа удивление, обратные ковычки подошли.. спасибо Alex_Ustinov

мы бы удивились, если бы подошли двойные!
...
Рейтинг: 0 / 0
27.10.2014, 17:32:02
    #38788472
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Стас0ндело в том, что нужны именно такие названия столбцовкому нужны? и зачем?
...
Рейтинг: 0 / 0
28.10.2014, 08:55:48
    #38788867
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неправильное имя столбца?
Стас0нЯ понимаю, просто создаваемая табличка содержит некоторое распределение. Так вот эта самая единица "1" - это значение по абсциссе.


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

таких полей не должно быть, должна быть дочерняя таблица с этим значением в поле, в ключе.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Неправильное имя столбца? / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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