Tek bir satırda veritabanına dizi takın

4 Cevap php

Ben bu yapılabilir olacaktır acaba? Veritabanında bir alana bir dizi eklemek için.

Örneğin ben sadece tek bir kimliği ile bu başlık olmasını istiyorsanız, bir başlık var, ama iki dilde web sitesinde kullanılmak üzere gidiyor.

Bu küresel kimliği ile masaya bağlantılı gerçek başlıkları ile küresel kimlikleri ve daha sonra başka bir tablo var başka bir tablo yapmak biraz gereksiz hissediyor.

Ben sadece böyle bir şey var istiyorum

ID      TITLE
1       Array("english title", "nederlandse titel");

Bu dilde açıklayabilir misiniz lütfen bu yapılabilir olacaktır eğer öyleyse ben, PHP / MSYQL kullanıyorum.

Oh evet ben korkak biçimlendirmek ve tekrar bir diziye çevirmek için bölünmüş işlevini kullanabilirsiniz düşündüm. Ama ben sadece hemen bir dizi olarak saklamak olabilir, ben kullanıcı (milyonda bir) aynı biçimlendirmeye sahip bir şeyler yazabilirsiniz harf acaba

4 Cevap

bu yapılabilir:

$title = serialize($array);

ve çözmek için:

$title = unserialize($mysql_data);

belirtildiği gibi ama gerçekten ilk etapta bir veritabanı faydalarını azaltır. Ben kesinlikle bu sayı gelecekte değişecek eğer desteklemek istiyoruz ve dillerin miktarına bağlı olarak, bunun yerine bir çok tablo veya çoklu-sütun seçeneği bakarak öneririm.

Tarafından bahsedilen edit: iyi bir nokta dcousineau (yorumlar)

Bazen kaçan sonra tefrika çıktı, vida şeyleri sorgu içine karakterleri atar. Siz base64_encode sizin serialize () () çağrıları sarın ve daha sonra unserialize önce base64_decode () kullanmak isteyebilirsiniz.

bu durumlar için düzeltilmiş kodu:

$title = base64_encode(serialize($array) );
$title = unserialize(base64_decode($mysql_data) );

Burada sadece iki makul seçimler gerçekten var:

Join with another table
pros: unlimited titles in unlimited languages
cons: join overhead is more computationally expensive, SQL is marginally more complex to update/insert etc

Multiple columns
eg: TITLE_EN, TITLE_NL, TITLE_DE
pros: fast to insert, select, etc
cons: limited number of languages, adding more is an ALTER TABLE

Bizim iki seçenek göz önüne alındığında, genellikle ilk bir seçim etmelidir. Eğer parallelized olamaz işlemlerin sadece bir müstehcen miktarda uğraşıyoruz, ya absosmurfly Eğer dil eklemek asla emin sürece, şema düzeninde ekstra esneklik uzun vadede baş ağrısı kazandıracak.

Diziler normalleştirme ihlal yapmak; uluslararasılaşma veritabanları ile benim deneyim ben, normalleştirilmiş bir ifadeler olan en iyi tasarım olduğunu tespit ettik

Ben kolayca satır toptan kopyalarını yapmak için izin verir - örneğin 'es' için 'es-mx' veya 'tr', 'en-US' için, 'tr-TR', ve benim favorim: 'xx-piglatin'. Bir dizi şemasında, yeniden yazmak her kayıt için ya da karmaşık ayrıştırma eklemek veya XML gibi diziler daha karmaşık bir şey, kullanmak istiyorsunuz ya.

Bu programın ifade tercüme olmasa bile kullanılabilir kalır yani COALESCE varsayılan dönmek için iş çevrilmemiş ifadeler bulmak için LEFT JOIN s kullanmak ve aynı zamanda kullanımı nispeten kolaydır.

3 sütunlu bir tablo kullanın!

Kimliği, TITLE_EN, TITLE_NL

Bu seri için iyi bir sebep gerçekten vardır!