SQL tasarım ve / veya dinamik iki boyutlu diziler depolamak için PHP sınıfı?

2 Cevap php

Ben çoğunlukla Enums, listeleri, arama verileri, fiyat yaprak, bu tür bir şey olarak kullanılan, çeşitli boyutlarda (x ve y her ikisi) (temelde tüm işlevselliği olmadan elektronik tablolar) dinamik dizileri saklamak için zarif bir yol gerekir. Çok dilli büyük bir bonus olacaktır. Özü hız.

İşte tipik bir "levha" bir örnek;

            |  1 |  2 |   3 |   4
  -------------------------------
  model A   | 2$ | 5$ |  8$ | 10$
  model B   | 3$ | 6$ |  9$ | 12$
  model C   | 4$ | 8$ | 10$ | 13$

Yani, bilgi almak için, ben yapardım;

  $price = this_thing_im_after ( '3', 'model B' ) ;
  echo $price ;   // Prints '9$'

Ben PHP5 ve Zend Framework dünyada değilim, ama tasarım ve SQL üzerine düşünceler gibi bir züppe, kütüphaneleri, uzantıları, vb ve dış dünyadan bile önerileri ben tekerleğin çok kalkmasından istemiyorum . Ben arka uç şeyler en gerekir ve daha sonra dinamik sayfaları için bir GUI yazacağım. Düşünceler, fikirler, işaretçiler?

Ben böyle, şimdi that savunanların indeksleri ve çarşaf, hatta veri (veya türünü sorgulamak istiyorum gibi ben verileri serialize ve blob tercih etmem işaret için sadece bir düzenleme awsome olurdu!) Ben çılgın bir ruh hali içinde yaşıyorum. Fakat yine de, bu benim için bir kesici değildir; Birisi bazı basit sorgulama ile bir veritabanı üzerinden giriş ve çıkış hızlı serializing için güzel bir kütüphane veya sınıf varsa, ben bütün mutluyum.

2 Cevap

Bir damla alana şeyi seri hale dışında, muhtemelen anahtar satır ve col alanlar bir anahtar / değer tablo ile sonuna kadar:

  CREATE TABLE sheet (
      sheet_id int not null,
      name varchar(32),
      rows int, -- stores max dimension if needed
      cols int, -- stores max dimension if needed
      primary key (sheet_id)
  );
  CREATE TABLE cells (
      cell_id identity, -- auto inc field for ease of updates
      sheet_id int not null, -- foreign key to sheet table
      row int not null,
      col int not null,
      value smalltext, -- or a big varchar depending on need
      primary key (cell_id), -- for updates
      unique index (sheet_id, row, col), -- for lookup
      index (value) -- for search
  );

  CREATE TABLE row_labels (
      sheet_id int not null,
      row int not null,
      label varchar(32),
      primary key (sheet_id, row)
  );

  CREATE TABLE col_labels (
      sheet_id int not null,
      col int not null,
      label varchar(32),
      primary key (sheet_id, col)
  );

Bu güzel verileri dilim sağlar:

 // Slice [4:20][3:5]
 SELECT row, col, value FROM cells
 WHERE sheet_id = :sheet
   AND row BETWEEN 4 AND 20
   AND col BETWEEN 3 AND 5
 ORDER BY row, col

 while ($A = fetch()) {
     $cell[$A['row'][$A['col']] = $A['value']; // or unserialize($A['value']);
 }

Bulunan veriler sadece part of, bir elektronik tablo veya sorguyu almak için herhangi bir ihtiyaç var mı?

Sadece depolamak ve her şeyi almak istiyorsanız, ben sadece dizinin kesin bir metinsel gösterimini kullanmak istiyorsunuz (örneğin serialize() ) ve METİN olarak saklayın.