This table does not contain a unique column. Grid edit, c..

uphero

Registered
При заявка в phpmyadmin излиза това съобщение:
This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.
Ето и заявката:
[sql]SELECT COUNT( `id` )
FROM `table`
WHERE `end` > NOW( )
AND `price` > '0'
AND `price` < '1000'
AND `discount` > '0'
AND `discount` < '100'
ORDER BY id DESC [/sql]
И изкарва грешен брой резултати.
Структурата:
[sql]
`price` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`discount` int(3) NOT NULL,
PRIMARY KEY (`id`,`price`,`discount`)[/sql]
Според мен всичко е точно и не се сещам къде е проблема.
 
Проблема е, че нямаш селектирано уникално поле, което да ти е indentifier за всеки запис.

Ако смениш заявката на:

Код:
SELECT id, COUNT( `id` )
FROM `table`
WHERE `end` > NOW( )
AND `price` > '0'
AND `price` < '1000'
AND `discount` > '0'
AND `discount` < '100'
ORDER BY id DESC

всичко ще е наред. Просто самия phpmyadmin не може да предостави по-горе изброените функции, защото няма уникално поле, на което да се позове. (приеми го като WHERE клаузата, която ще трябва да добави към заявката за DELETE, UPDATE etc.)
 
Fakeheal каза:
Проблема е, че нямаш селектирано уникално поле, което да ти е indentifier за всеки запис.

Ако смениш заявката на:

Код:
SELECT id, COUNT( `id` )
FROM `table`
WHERE `end` > NOW( )
AND `price` > '0'
AND `price` < '1000'
AND `discount` > '0'
AND `discount` < '100'
ORDER BY id DESC

всичко ще е наред. Просто самия phpmyadmin не може да предостави по-горе изброените функции, защото няма уникално поле, на което да се позове. (приеми го като WHERE клаузата, която ще трябва да добави към заявката за DELETE, UPDATE etc.)
Пак не става.
Интересното е, че тази заявка васи точен резултат:
[sql]SELECT COUNT(`id`) FROM `table` WHERE `end`> NOW() ORDER BY id DESC[/sql]
 
Идеята е, че ти си сетнал primary keys на определени колони, но все още нямаш Unique key. Полето id е доста подходящо за това. То най-вероятни ти е Auto-Increment, което ако си създавал схемата на таблица през phpmyadmin, би трябвало да ти го е сетнало като unique.
Провери дали не ти липсва декларация за unique key.

По принцип заявките би трябвало да работят. "Грешката" по-горе от phpmyadmin-a, не е точно грешка. А по-скоро нотис, който да те подсети, че ако нямаш уникално поле, неочаквани резултати биха се генерирали.

Това е от версия 4.0+ btw

ps. Би било странно да имаш unique key и пак да ти дава този нотис. В този случай може ли да пуснеш схемата на таблицата.
 
Fakeheal каза:
Идеята е, че ти си сетнал primary keys на определени колони, но все още нямаш Unique key. Полето id е доста подходящо за това. То най-вероятни ти е Auto-Increment, което ако си създавал схемата на таблица през phpmyadmin, би трябвало да ти го е сетнало като unique.
Провери дали не ти липсва декларация за unique key.

По принцип заявките би трябвало да работят. "Грешката" по-горе от phpmyadmin-a, не е точно грешка. А по-скоро нотис, който да те подсети, че ако нямаш уникално поле, неочаквани резултати биха се генерирали.

Това е от версия 4.0+ btw

ps. Би било странно да имаш unique key и пак да ти дава този нотис. В този случай може ли да пуснеш схемата на таблицата.
Под грешка има предвид, че вади грешен резултат.
Ето структурата на таблицата:
[sql]CREATE TABLE IF NOT EXISTS `tables` (
`ofId` int(11) NOT NULL AUTO_INCREMENT,
`price` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`discount` int(3) NOT NULL,
PRIMARY KEY (`ofId`,`price`,`discount`),
UNIQUE KEY `ofId` (`ofId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1192 ;[/sql]
Всичко си сетнато както трябва според мен.
 
Ами тогава вероятно проблема е, че полето ти discount e int, a ти го подаваш в кавички, което го прави string. Също и за price.
Не записвай числа в varchar полета, цените и отстъпките са числа. И ти така или иначе ще правиш операции, които са предназначени за числа.
 
Fakeheal каза:
Ами тогава вероятно проблема е, че полето ти discount e int, a ти го подаваш в кавички, което го прави string. Също и за price.
Не записвай числа в varchar полета, цените и отстъпките са числа. И ти така или иначе ще правиш операции, които са предназначени за числа.
Сега ще редактирам и ще пробвам. И не са само числа, някои резултаите съдържат и други символи.
 
Fakeheal каза:
Ами тогава вероятно проблема е, че полето ти discount e int, a ти го подаваш в кавички, което го прави string. Също и за price.
Не записвай числа в varchar полета, цените и отстъпките са числа. И ти така или иначе ще правиш операции, които са предназначени за числа.
Смених хостинага и всичко е пак ОК. На стария имаше сумати и кеш плъгини и глупости и нищо не работеше както трябва.
 

Back
Горе