Войти

Показать полную графическую версию : мускул ерор


Страниц : [1] 2

E-mail
14-03-2005, 17:09
Too many key parts specified. Max 16 parts allowed

что он этим хочет сказать?

vadimiron
14-03-2005, 17:42
Слишком много частей одного ключа специализированно, Максимально - 16
Видимо, в данной таблице были указаны все столбцы как ключи
Постите сюда структуру вашей таблицы, так будет понятней

E-mail
14-03-2005, 22:13
я ее посмотреть не могу(
у меня 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?

E-mail
16-03-2005, 22:55
Vlad Drakula
а если мне надо больше 10? зачем пробывать?

Vlad Drakula
16-03-2005, 23:24
E-mail
а в какой строчке возникает ошибка?

E-mail
17-03-2005, 00:34
Vlad Drakula
ты прикалываешься?

E-mail
17-03-2005, 02:07
vadimiron
хелп

Vlad Drakula
17-03-2005, 12:15
E-mail
нет не издеваюсь... обычно пхп выводин номер строчки где возникла ошибка!

E-mail
17-03-2005, 20:03
Vlad Drakula
ты тему топика смотрел?
мускул эррор
die(mysql_error());
разве в коде их так много?

Vlad Drakula
17-03-2005, 21:01
E-mail
на входе функции add_db нужен ассациативный массив...

E-mail
17-03-2005, 21:38
спасибо, а sql запрос не поможешь построить?)

Vlad Drakula
17-03-2005, 22:22
E-mail
а что этот запрос должен делать?

E-mail
18-03-2005, 04:52
Vlad Drakula
создовать таблицу в 27 ячеек первая из которых id int(11) auto increment,
а остальные full text

см. выше я там даже таблицу нарисовал...

mar
18-03-2005, 11:55
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, либо смириться.
Кстати, я бы такую таблицу в любом случае создала бы как несколько связанных, - рисунки бы точно держала отдельно, да и остальную информацию, судя по всему, можно разделить.

E-mail
18-03-2005, 20:53
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???

mar
18-03-2005, 22:17
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;

E-mail
18-03-2005, 22:59
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?

===
огромное спасибо!
хелп

E-mail
18-03-2005, 23:17
я конечно понимаю что это неприлично замечать такие весчи, но почему у всех моих тем больше чем у когобыто нибыло просмотров? причем в любых форумах.....?




© OSzone.net 2001-2012