SQL - не намира колонка Unknown column

index

Super Moderator
[sql]
SELECT
`userinfo`.`data` AS `information` ,
`userinfo`.`id` AS `userid` ,
`useraddinfo`.`require` AS `require` ,
`useraddinfo`.`data` AS `name` ,
`useraddinfo`.`type` AS `type`
FROM
`useraddinfo` , `userinfo`
WHERE
`userinfo`.`userid` = '1'
AND
`userinfo`.`typedata` = `useraddinfo`.`id `
[/sql]
Заявка


Таблици :
[sql]

CREATE TABLE `useraddinfo` (
`id` int(11) NOT NULL auto_increment,
`data` text collate utf8_bin NOT NULL,
`type` text collate utf8_bin NOT NULL,
`require` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=6 ;


INSERT INTO `useraddinfo` VALUES (1, 0x61646472657373, 0x7465787461726561, 1);
INSERT INTO `useraddinfo` VALUES (2, 0x70686f6e65, 0x696e707574, 1);
INSERT INTO `useraddinfo` VALUES (3, 0x70686f6e655f616761696e, 0x696e707574, 1);
INSERT INTO `useraddinfo` VALUES (4, 0x6269727468646179, 0x696e707574, 0);
INSERT INTO `useraddinfo` VALUES (5, 0x736b797065, 0x696e707574, 2);


CREATE TABLE `userinfo` (
`id` int(11) NOT NULL auto_increment,
`userid` int(11) NOT NULL,
`typedata` int(11) NOT NULL,
`data` text collate utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=61 ;


INSERT INTO `userinfo` VALUES (31, 1, 1, 0x6e756c6c);
INSERT INTO `userinfo` VALUES (32, 1, 2, 0x6e756c6c);
INSERT INTO `userinfo` VALUES (34, 1, 4, 0x6e756c6c);
INSERT INTO `userinfo` VALUES (59, 1, 3, 0x6e756c6c);
INSERT INTO `userinfo` VALUES (60, 1, 5, 0x6e756c6c);
[/sql]

Грешката която трещи е :
#1054 - Unknown column 'useraddinfo.id ' in 'where clause'


Нещо много яко забих отново.... много често почна да ми се случва...ЩЕ съм много благодарен ако ударите едно рано :)
 

palex

Registered
В реда:
`userinfo`.`typedata` = `useraddinfo`.`id `
имаш интервал след id

Между другото аз рядко използвам `. Те са необходими само когато за име на поле използваш ключова дума на SQL (ти имаш такъв случай с полето require), което по принцип не е добра практика, да не говорим че MSSQL и PostgreSQL с които все някога ще се сблъскаш не приемат тази нотация. Също бих ти препоръчал когато си правиш базата дани да използваш за всяка таблица уникален префикс на полетата и само релационните полета да държиш без префикс с еднакви имена. Например аз бих създал таблиците така:


[sql]CREATE TABLE useraddinfo (
id int(11) NOT NULL auto_increment,
ua_data text collate utf8_bin NOT NULL,
ua_type text collate utf8_bin NOT NULL,
ua_require tinyint(1) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=6 ;

CREATE TABLE userinfo (
id int(11) NOT NULL auto_increment,
ui_userid int(11) NOT NULL,
ui_typedata int(11) NOT NULL,
ui_data text collate utf8_bin NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=61 ;
[/sql]

Също така използването на псевдоними на таблиците при заявките ги прави по-четими. Например:
[sql]SELECT
ui.ui_data AS information,
ui.id AS userid,
ua.ua_require AS required,
ua.ua_data AS name,
ua.ua_type AS type
FROM
useraddinfo ua, userinfo ui
WHERE
ui.ui_userid = 1 AND ui.ui_typedata = ua.id
[/sql]
 

index

Super Moderator
Дам, забелязах ,че require ми го оцветява по-друг начин в pma-то. Така и не успях да разбера защо така го правеше. Спомням си ,че пробвах и с апострофите и без тях.... Човешка работа :))) Благодаря много. А , ако разясниш малко повече за require в SQL няма да ти се разсърдя .
+1 :)
 

palex

Registered
Ключова дума - използва се в конструкцията GRANT (http://dev.mysql.com/doc/refman/5.0/en/grant.html) по принцип не е разрешено ползването на ключови думи в имената на обектите, които се създават, за да не се обърка компилатора на заявките. Всички думи които участват в конструкциитена заявките са запазени (като select,where, group,union и т.н.)
 

Горе