2013-03-15 21 views
6

auto_increment sütun adını (SON INSERT ID değil) tablosundan nasıl alabilirim? örneğinOtomatik Artış Sütunu Algıla

:

create table members (member_id int auto_increment, name char(50), primary key(member_id)); 

ben masa üyelerinden member_id almak ne yapabilirim.

Bir php sınıfı yapıyorum, ben böyle bu edinmesini sağlayacak bir yöntem eklemek için gidiyorum: Bu otomatik artış sütununu bulmak bilmek ve bir sorgu inşa etmeliyiz

$members->findById(123); 

tabanlı Bunun üzerine sorguyu yapın.

+0

Ama insert ID ihtiyacım yok, ben Sütun adı lazım. –

+1

Yeniden açmayı oylama. Bu soru bir kopya olarak işaretlendi, ancak diğer soru farklı. –

cevap

8

Sen

show columns from members where extra like '%auto_increment%' 

İlk sütun Field senin auto_increment sütun adıdır ile sütun alabilirsiniz.

+3

Neden downvote? .... Bu iyi bir cevap! – beck03076

0

Bildirimi, dynamic_schema'ya göre dinamik olarak hazırlamanız ve sonra yürütmeniz gerekir.

PREPARE stmt FROM concat(
'select * from members where ', 
(select COLUMN_NAME 
    from INFORMATION_SCHEMA.COLUMNS 
    where table_name='members' and EXTRA like '%auto_increment%'), 
    '=?' 
); 
EXECUTE stmt; 
1
SELECT column_name 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_name = "members" 
AND  extra = "auto_increment"; 

bu deneyin!

1

Bu tür bir işlevi Zend Framework üzerinde çalışırken Zend_Db bileşeninin bir parçası olarak uyguladım. INFORMATION_SCHEMA'ya erişmenin çok yavaş olduğunu buldum, dolayısıyla bunun yerine DESCRIBE kullanmak zorunda kaldım. Aşağıdaki (ama bu sadece test kodu, Zend Framework parçası olmayan basitleştirilmiş) gibi

şey:

function getAutoIncColumn($table) 
{ 
    global $dbh; 

    $stmt = $dbh->query("DESCRIBE `$table`"); 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     if (strstr($row["Extra"], "auto_increment")) { 
     return $row["Field"]; 
     } 
    } 
    return null; 
} 
+0

Bilgi şeması yavaşlığı ile ilgili sorunlar şu şekilde çözülebilir: 'set global innodb_stats_on_metadata = 0; –

+0

@MichaelBenjamin, bu yapılandırma değişkenini biliyorum. Bu iyi bir çözüm. Ancak bu ayarlamayabilir ve PHP uygulaması, global değişkenleri değiştirmek için gereken SUPER ayrıcalığına sahip olmayabilir. –

+0

'set session innodb_stats_on_metadata = 0;' bu durumda bilgi şeması kullanarak sorgular için. –

İlgili konular