Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   мускул ерор (http://forum.oszone.net/showthread.php?t=46671)

E-mail 14-03-2005 17:09 306648

мускул ерор
 
Too many key parts specified. Max 16 parts allowed

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

vadimiron 14-03-2005 17:42 306662

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

E-mail 14-03-2005 22:13 306743

я ее посмотреть не могу(
у меня 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      |
====================================================

а вот собсно сам скул запрос через пхп:


PHP код:

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].'`');


PHP код:

$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 307091

E-mail
мда...
а вы пробовали уменьшить количество элементов в массиве b до 10?

E-mail 16-03-2005 22:55 307414

Vlad Drakula
а если мне надо больше 10? зачем пробывать?

Vlad Drakula 16-03-2005 23:24 307423

E-mail
а в какой строчке возникает ошибка?

E-mail 17-03-2005 00:34 307438

Vlad Drakula
ты прикалываешься?

E-mail 17-03-2005 02:07 307453

vadimiron
хелп

Vlad Drakula 17-03-2005 12:15 307557

E-mail
нет не издеваюсь... обычно пхп выводин номер строчки где возникла ошибка!

E-mail 17-03-2005 20:03 307734

Vlad Drakula
ты тему топика смотрел?
мускул эррор
die(mysql_error());
разве в коде их так много?

Vlad Drakula 17-03-2005 21:01 307747

E-mail
на входе функции add_db нужен ассациативный массив...

E-mail 17-03-2005 21:38 307755

спасибо, а sql запрос не поможешь построить?)

Vlad Drakula 17-03-2005 22:22 307768

E-mail
а что этот запрос должен делать?

E-mail 18-03-2005 04:52 307827

Vlad Drakula
создовать таблицу в 27 ячеек первая из которых id int(11) auto increment,
а остальные full text

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

mar 18-03-2005 11:55 307911

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 308065

mar
этот вариант какраз исключительный. таблица isap , если тип поменять?

собственно в мускуле по дефолту в одной таблице не может быть больше 16 ячеек, так? или я опять не понимаю?

если остановится на связанных таблицах, можно привести пожалуста наглядный пример обращения к такой таблице? и создание оной и добавление в оную и связанные с ней?..
хелп плиз.

Vlad Drakula 18-03-2005 21:19 308072

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 308089

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 308104

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 308107

я конечно понимаю что это неприлично замечать такие весчи, но почему у всех моих тем больше чем у когобыто нибыло просмотров? причем в любых форумах.....?

mar 19-03-2005 00:52 308117

E-mail
я бы не сказала ;). Хотя это обсуждаемо. Но во флейме :)

E-mail 19-03-2005 14:05 308220

mar
а по поводу вопросов?...(

mar 19-03-2005 14:45 308229

E-mail
извини, create у меня действительно с ошибкой - сделала гибрид разных SQL:
вот вариант для mysq:
Код:

CREATE TABLE `images` (
`id` INT( 11 ) NOT NULL ,
`user_id` INT( 11 ) NOT NULL ,
`image` BLOB,
INDEX ( `user_id` ) ,
UNIQUE (
`id`
)
);

u.id это использование алиаза (псевдонима) для таблицы,- определяется в самом запросе : FROM users u

про ключи и индексы - в топике Чем KEY отдличается от INDEX? (там же ссылки на документацию)
А вот еще полезный топик: Научите меня правильно строить сложные запросы к базе данных

E-mail 22-05-2005 14:40 326379

а как напечатать содержимое которое я беру из связаных таблиц?

вот например пишу:

PHP код:

$page=mysql_query("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;"
);

echo 
page['image']; 

и ничего, подскажите плыз.

а лутше полный пример от создания и до вывода на печать, чтобы я больше не приставал с этим вопросом..

archy 23-05-2005 08:05 326480

E-mail
image это битмап? Тогда перед выводом содержимого image нужно послать браузеру mime заголовок Content-Type: image/[jpeg|gif|png]

E-mail 23-05-2005 22:21 326702

archy хехе, с изображением - понятно, спасип,

а как его лутше послать??:)

E-mail 24-05-2005 01:04 326742

т.е. допустим в переменной $page['image'] картинка а в переменной $page['text'] текст.

я их вывожу

foreach($page as $i)
echo $i;

как сделать так чтобы выводился и текст и картинка? если картинка в базе как блоб? может както надо в базе подругому лутше сохранять картинки?:)

Prisoner 25-05-2005 10:04 327158

В базе лучше хранить ссылки на изображения. Таким образом можно не заморачиваться на отправку тех или иных заголовков, а формировать валидный тег img. Как всегда - два способа, куча нюансов. Я бы выбрал способ с хранением ссылок.

archy 25-05-2005 17:23 327251

E-mail
Вытаскивать картинки отдельным скриптом, который будет слать свой header

E-mail 25-05-2005 23:00 327329

archy а покажи пример взаимодействия двух скриптов

archy 26-05-2005 14:45 327515

Вывод ссылки на картинку для браузера
PHP код:

<?php
echo "<img src=img.php?id=1><br />Картинка 1";
?>

Вывод контента картинки img.php
PHP код:

<?php
header
("Content-type: image/png");
...
$query="select image from table where id=" $_GET["id"];
...
echo 
$row["image"];
?>


E-mail 26-05-2005 23:21 327699

archy, а если я хочу изменить ее размер?
ну т.е. не в теге а через модуль gd это както возможно после вытаскивания?

archy 27-05-2005 13:23 327887

А хелп глянуть по этому модулю никак?


Время: 06:17.

Время: 06:17.
© OSzone.net 2001-