Показать полную графическую версию : мускул ерор
Too many key parts specified. Max 16 parts allowed
что он этим хочет сказать?
vadimiron
14-03-2005, 17:42
Слишком много частей одного ключа специализированно, Максимально - 16
Видимо, в данной таблице были указаны все столбцы как ключи
Постите сюда структуру вашей таблицы, так будет понятней
я ее посмотреть не могу(
у меня phpmyadmin при обращении к таблице с количеством рядов больше 7 начинает глючить а в часности начинается дикое колличество обновлений((
версия 2х.. даже незнаю, может чтото не так в конфиге?
у меня структура вида:
--------------------------------------------------------------------------------------------------------------------------------------------
поле | тип |атрибуты|ноль|по умлолчанию| дополнительно | действие |
==============================================================================
id | int(11) | | нет | | auto_increment | активны все иконки, кроме полнТекст |
==============================================================================
name | text | | да | NULL | | активен только полнТекст |
==============================================================================
content | text | | да | NULL | | активен только полнТекст |
==============================================================================
fone | text | | да | NULL | | активен только полнТекст |
==============================================================================
у меня по всей видимости получается:
----------------------------------------------------------------------------------------------
Имя ключа | Тип | Количество элементов | Действие | Поле |
====================================================
id | UNIQUE | 2 | | id |
====================================================
| Нет | | name |
==================================
name FULLTEXT | Нет | | content |
==================================
| Нет | | fone |
====================================================
а должно, как мне кажется быть:
----------------------------------------------------------------------------------------------
Имя ключа | Тип | Количество элементов | Действие | Поле |
====================================================
id | UNIQUE | 2 | | id |
====================================================
name | FULLTEXT | Нет | | name |
====================================================
content | FULLTEXT | Нет | | content |
====================================================
fone | FULLTEXT | Нет | | fone |
====================================================
а вот собсно сам скул запрос через пхп:
function add_db($tb,$in)
{
foreach($in as $k=>$a)
{
$str.=$k.",";
$val.="'".$a."',";
}
$str.="|";
$val.="|";
$str=str_replace(",|","",$str);
$val=str_replace(",|","",$val);
mysql_query("INSERT INTO $tb(".$str.") VALUES(".$val.");") or die(mysql_error());
}
#-----------------------------------------------------------------------------------------------------------------#
#--- создает в базе таблицу $tb со столбцом $id в качестве инкремента и столбцы с именами значений массива $in ---#
#-----------------------------------------------------------------------------------------------------------------#
function create_tb($tb,$id,$in,$ff)
{
$last=$in[1];
foreach($in as $a)
{
if(($a!=$in[0])&&($a!=$in[1]))
{
$str.="ADD ".$a." TEXT DEFAULT NULL AFTER ".$last.",";
$full.=$a.",";
$last=$a;
}
}
$str.="|";
$full.="|";
$str=str_replace(",|","",$str);
$full=str_replace(",|","",$full);
mysql_query("
CREATE TABLE ".$tb."(".$id." INT(11) DEFAULT '0' NOT NULL AUTO_INCREMENT, $in[1] TEXT, UNIQUE(".$id."), FULLTEXT(".$in[1]."));
");
mysql_query("ALTER TABLE ".$tb." ".$str.";");
mysql_query("ALTER TABLE ".$tb." ADD FULLTEXT(".$full.");");
mysql_query('ALTER TABLE `'.$tb.'` ADD `'.$ff[0].'` TEXT DEFAULT NULL AFTER `'.$in[count($in)-1].'` ,' . ' ADD `'.$ff[1].'` TEXT
DEFAULT NULL AFTER `'.$ff[0].'` ,' . ' ADD `'.$ff[2].'` TEXT DEFAULT NULL AFTER `'.$ff[1].'`');
}
$f[]="id";
$f[]="name";
$f[]="content";
$f[]="fone";
$f[]="bss";
$f[]="imogo";
$f[]="iss";
$f[]="locadion";
$f[]="tel";
$f[]="fax";
$f[]="mail";
$f[]="wfrgmhil";
$f[]="ste";
$f[]="img";
$f[]="ifthlt";
$f[]="wg";
$f[]="wall";
$f[]="wes";
$f[]="wareskey";
$f[]="wt";
$f[]="wfgtrutfull";
$f[]="narehocs";
$f[]="rtes";
$f[]="rub_id";
$ff[]="trip";
$ff[]="from";
$ff[]="money";
create_tb("ut_hz","id",$f,$ff);
$b[]="id";
$b[]="name";
$b[]="content";
$b[]="fone";
$b[]="bss";
$b[]="imogo";
$b[]="iss";
$b[]="locadion";
$b[]="tel";
$b[]="fax";
$b[]="mail";
$b[]="wfrgmhil";
$b[]="ste";
$b[]="img";
$b[]="ifthlt";
$b[]="wg";
$b[]="wall";
$b[]="wes";
$b[]="wareskey";
$b[]="wt";
$b[]="wfgtrutfull";
$b[]="narehocs";
$b[]="rtes";
$b[]="rub_id";
$b[]="trip";
$b[]="from";
$b[]="money";
add_db("ut_hz",$b);
кто подскажет что по улутшению скрипта и по топшной трабле буду благодарен :)
при редактировании сообщений нужен линк на теги вставки!
З.Ы.:
убить бы того кто лишние пробелы в посте убирает((
Vlad Drakula
15-03-2005, 23:51
E-mail
мда...
а вы пробовали уменьшить количество элементов в массиве b до 10?
Vlad Drakula
а если мне надо больше 10? зачем пробывать?
Vlad Drakula
16-03-2005, 23:24
E-mail
а в какой строчке возникает ошибка?
Vlad Drakula
ты прикалываешься?
Vlad Drakula
17-03-2005, 12:15
E-mail
нет не издеваюсь... обычно пхп выводин номер строчки где возникла ошибка!
Vlad Drakula
ты тему топика смотрел?
мускул эррор
die(mysql_error());
разве в коде их так много?
Vlad Drakula
17-03-2005, 21:01
E-mail
на входе функции add_db нужен ассациативный массив...
спасибо, а sql запрос не поможешь построить?)
Vlad Drakula
17-03-2005, 22:22
E-mail
а что этот запрос должен делать?
Vlad Drakula
создовать таблицу в 27 ячеек первая из которых id int(11) auto increment,
а остальные full text
см. выше я там даже таблицу нарисовал...
E-mail
почитай документацию (можно через google): это ошибка
#Error: 1070 SQLSTATE: 42000 (ER_TOO_MANY_KEY_PARTS)
Message: Too many key parts specified; max %d parts allowed
относится к использованию таблицы типа ISAM, в которой по дефолту: 16 keys with 16 key parts / key
Соответственно, либо надо смотреть, нельзя ли подкрутить это в MySQL, либо смириться.
Кстати, я бы такую таблицу в любом случае создала бы как несколько связанных, - рисунки бы точно держала отдельно, да и остальную информацию, судя по всему, можно разделить.
mar
этот вариант какраз исключительный. таблица isap , если тип поменять?
собственно в мускуле по дефолту в одной таблице не может быть больше 16 ячеек, так? или я опять не понимаю?
если остановится на связанных таблицах, можно привести пожалуста наглядный пример обращения к такой таблице? и создание оной и добавление в оную и связанные с ней?..
хелп плиз.
Vlad Drakula
18-03-2005, 21:19
E-mail
я создавал таблицы по 18 столбцов... все работало нормально...
E-mail
mysql_query('create table program ( Id MEDIUMINT UNSIGNED not null auto_increment,
URL FULLTEXT,
ScreenShots FULLTEXT,
Description FULLTEXT
.................................................................................................... ....
;');
но зачем все поля FULLTEXT???
Vlad Drakula
я создавал таблицы по 18 столбцов... все работало нормально...
прочитай внимательно то, что я написала, а лучше документацию. ОК?
E-mail
про структуру - то, что Влад пишет - это само собой - Вы какой длины name в fulltext хотите записывать :) ?
наглядный пример могу пожалуйста привести, давайте только структуру составим. Для этого объясните, что собственно требуется в эту самую таблицу помещать.
Пример до того для затравки:
CREATE TABLE users (
id int(11) NOT NULL auto_increment,
username varchar(32) NOT NULL default '''''',
realname text NOT NULL,
email varchar(255) NOT NULL default '',
www varchar(255) default NULL,
icq int(16) default NULL,
location varchar(255) NOT NULL default '',
comments text,
registry_date timestamp(14) NOT NULL,
created_by int(11) NOT NULL default '0',
is_enabled int(11) NOT NULL default '1',
deleted int(11) NOT NULL default '0',
PRIMARY KEY (id),
KEY icq (icq),
KEY email (email),
KEY location (location),
KEY username (username)
) TYPE=MyISAM;
CREATE TABLE images (
id int(11) NOT NULL auto_increment, -- для проформы - в этом примере это поле не нужно
user_id INT( 11 ) NOT NULL , -- связь с users.id
image blob
INDEX ( user_id)
);
SELECT u.id AS id, u.realname, i.image FROM users u
LEFT JOIN images i ON (i.user_id = u.id)
WHERE u.username = 'E-mail';
или то же, но в другой нотации:
SELECT u.id AS id, u.realname, i.image FROM users u, images i
WHERE u.username = 'E-mail' AND i.user_id = u.id;
mar
спасибо тебе огромное за примерчики.
вопрос есть, что такое u.id и где он определен при создании таблицы?
как его находит запрос селеккт?...
-----------------
по этому запросу выдает ошибку, видимо коментарии не там гдето удалил или еще чтото..:
CREATE TABLE images (
id int(11) NOT NULL auto_increment, -- для проформы - в этом примере это поле не нужно
user_id INT( 11 ) NOT NULL , -- связь с users.id
image blob
INDEX ( user_id)
);
---------
по поводу фултекста, я незнаю точно размер текста хранимого в этих ячейках, он может колебаться от вообще без текста так и до порядка тысячи символов. ну может 300
---------
и еще, в чем собственно разница, между элементами key и primary key?
===
огромное спасибо!
хелп
я конечно понимаю что это неприлично замечать такие весчи, но почему у всех моих тем больше чем у когобыто нибыло просмотров? причем в любых форумах.....?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.