Я получаю эту информацию от sp_helpconstraint iyas_grandtest.
constraint_name definition
iyas_grand_2317208971 PRIMARY KEY INDEX ( id) : CLUSTERED
iyas_grand_2317208972 UNIQUE INDEX ( unik) : NONCLUSTERED
iyas_grand_2317208973 UNIQUE INDEX ( comp_unik1, comp_unik2) : NONCLUSTERED
Я хочу извлечь:
- id от ПЕРВИЧНОГО,
- unik от UNIQUE,
- comp_unik1 и comp_unik2 из UNIQUE
следующим образом:
- $ keys [] = id
- $ уникальных ['iyas_grand_2317208972'] [] = unik
- $ уникально ['iyas_grand_2317208973'] [] = comp_unik1
- $ уникальных ['iyas_grand_2317208973'] [] = comp_unik1
обратите внимание, что иногда ПЕРВИЧНЫМ ключом может быть ИНДЕКС ПЕРВИЧНОГО КЛЮЧА (id, id2).
То, что у меня сейчас есть, имеет недостаток (обнаружение только 1 ключа для составного ключа и сокращение имени, если имеет _, т.е. 'comp_unik1' становится 'comp').
$sql = sybase_query("sp_helpconstraint iyas_grandtest");
while( $row = sybase_fetch_assoc($sql) ) {
$txt= $row['definition'];
$re1='(PRIMARY)'; # Word 1
$re2='.*?'; # Non-greedy match on filler
$re3='(?:[a-z][a-z]+)'; # Uninteresting: word
$re4='.*?'; # Non-greedy match on filler
$re5='(?:[a-z][a-z]+)'; # Uninteresting: word
$re6='.*?'; # Non-greedy match on filler
$re7='((?:[a-z][a-z]+))'; # Word 2
if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5.$re6.$re7."/is", $txt, $matches))
{
$word =$matches[2][0];
$keys = explode(",", $word);
}
}