Sol 3 Tablolar katılın ve göster Boş Hücreleri üzerinde Doğru veya Yanlış

5 Cevap php

Tamam, bu yüzden ben doğru açıklamak umut kafa karıştırıcı olabilir.

Ben 4 tablolar var:

business photos video category

Ben (veya başka bir yerde) "özellikli" ana sayfada işlerini göstermek istiyorum ve ben bu iş için fotoğraflar veya videolar olup olmadığını dayalı tablo satırında Evet veya Hayır göstermek istiyorum.

Örnek: Joes Crab Shack hiçbir video ya da fotoğrafları var ama özellikli. Onun sıra dışarı yankılandı olduğunda Yani, İşletme Adı ve İş Sahibi gösterecektir ama tersi doğru olsaydı, bu Yoksa Hayır diyecekler video ve fotoğrafları sütununda böylece fotoğraf veya video hücrelerinde hiçbir veri yok olacak Evet söyleyebilirim.

Here's my pastebin

5 Cevap

Ben bu bir bıçak almak için gidiyorum.

Ben veritabanı, fotoğraf ve videoları kategorileri oluştururken genelde yapılan bir arama yapmak ve çıkışı kontrol etmek istiyorum "özellikli" işletmelerin ekran için tablo oluştururken Ne yapardın, olduğunu. Bir şey varsa o veritabanından dönüş null ise, evet, herhangi bir fotoğraf veya video yok güvenli bir varsayım ve böylece bir No yazdırabilirsiniz söylemek zorunda

Böyle bir şey ile küçük bir hile yapabilirsiniz:

SELECT b.[other stuff],
(SELECT COUNT(1) FROM photos WHERE busid = b.id) AS photo_count,
(SELECT COUNT(1) FROM videos WHERE busid = b.id) AS video_count
FROM business AS b [etc]

photo_count ve PHP gelen evet / hayır almak kolay - video_count 0 veya 0'dan büyük dönecektir. Bu da işletme başına 1'den fazla fotoğraf / video sahip olsun istiyorum yinelenen sonuçları durdurmak olacaktır.

Caveat!: Eğer kullandığınız ORM bu dönüştürme ... Ben bir ORM onunla iyi olurdu emin değilim. Ama kenar yumuşatma "AS" from() & havlaması değilse join(), belki herhangi bir sorun olmadan select() olarak alt sorgular gizlice olabilir.

Tablolar sıralama bu gibi kurulmuş olduğunu varsayarak im:

  1. İş Bilgisi
  2. Resimler
  3. Videolar
  4. ?

Her iş için benzersiz bir kimlik yaratacak (değiştirmemesi güzel çalışıyor) ve bir fotoğraf veya video kayıtları, (Kimlik sütun ya da ne olursa olsun) bağlı olduğu kimliği ile ilgili tablolar takılı olacak iş için yüklenir zaman.

Her tablo (Dyllon belirtildiği gibi "çok bir") iş için birden çok girdi sağlayacaktır.

Eğer özellikli iş görüntüleniyor böylece zaman benzersiz kimliğini kullanarak video ve fotoğraf tablolar ikisine karşı bir sorgu çalıştırmak ve döndürülen satır arar. Satırlar = yes,! Satırlar = hayır.

One question: Are you going to store the images in the db or file names and have them uploaded to a directory?

Ben yukarıdaki önerilere eklemek istiyorum sadece diğer giriş tablolarda kendilerini herhangi null değerleri zaten bu proje için dört tablolar gibi görme söz konusu olabilir ki, orada asla böylece tablo yapısı olduğunu.

Depolama ve döndürülen verileri ile sıralama Ben ikinci çok boyutlu dizi / nesne yöntem.

Aynı zamanda da, her video için bir çerçeve yakalamak olabilir - - hoş bir dokunuş ilk görüntü fotoğraflar için küçük resim olarak döndürülen yeniden boyutlandırmak için PHP görüntü fonksiyonları kullanmak olacaktır böylece yerine evet veya hayır ki, biz her ikisi veya için küçük görünüyor bir 'resim / video' sümüklüböcek.

Çok, ama benim 0,02 $ değil.

Ben fotoğraf ve videoları tablolar iş başına 1'den fazla kayıt, ilişkinin bir "birçok birini" içeren farz edeceğim.

Bu durumda size yaklaşımı yeniden düşünmek ya da en azından veritabanı sonuçları bazı biçimlendirme yapmak için ihtiyacımız olacak. Joes yengeç kulübe en fazla 1 video ve / veya fotoğraflar varsa şu anda Joes yengeç kulübede için birden fazla sonuç için gidiyoruz.

Eğer fotoğraf / video sonuçlarını gerekiyorsa $featured['videos'] veya $featured['photos] senin katılmak sonuçlarını içerecektir çok boyutlu bir dizi / nesne oluşturmak için şimdi onları alıyor gibi, sonuçları biçimlendirmek olabilir senin biçimlendirilmiş dizisi 'videolar' tuşuna içermiyorsa, o zaman hiçbir video sonuçlar var.

Daha fazla 0 satır dönen eğer bilmeniz gereken tüm ise belirli bir iş ait videoları ve fotoğrafları saymak için model iki yeni yöntemler yaratmak. Şimdi sadece echo'ing meselesi 'Evet' yöntemleri daha fazla 0 satır ya da 'Hayır' Aksi dönerseniz.

Edit: Model işlevi bu gibi görünmelidir

function frontPageList() {
    $this->db->select('b.busname, b.busowner, b.webaddress');
    $this->db->select('(SELECT COUNT(1) FROM photos WHERE busid = b.id) AS photo_count', FALSE);
    $this->db->select('(SELECT COUNT(1) FROM videos WHERE busid = b.id) AS video_count', FALSE);
    $this->db->from ('business AS b');
    $this->db->where('featured', '1');
    return $this->db->get();
}

Tamam, burada sana adamlar gelen önerileri dayalı sorunu çözmek için ne yapmak başardı budur:

Model:

function frontPageList() {
    $this->db->select('b.busname, b.busowner, b.webaddress, p.photoname, v.title');
    $this->db->from ('business AS b');
    $this->db->where('featured', '1');
    $this->db->join('photos AS p', 'p.busid = b.id', 'left');
    $this->db->join('video AS v', 'v.busid = b.id', 'left');
    return $this->db->get();

}

Control:

function index()
    {
        $this->load->model('Business_model');
        $data['featured']   = $this->Business_model->frontPageList();
        $data['user_id']    = $this->tank_auth->get_user_id();
        $data['username']   = $this->tank_auth->get_username();
        $data['page_title'] = 'Welcome To Jerome - Largest Ghost Town in America';
        $data['page'] = 'welcome_message'; // pass the actual view to use as a parameter
        $this->load->view('container',$data);
    }

View:

<table id="businessTable">
    <thead><tr><th>Business Name</th><th>Business Owner</th><th>Web</th><th>Photos</th><th>Videos</th></tr></thead>
        <?php foreach ($featured->result() as $row): ?>
            <tr>
                <td><?=$row->busname?></td>
                <td><?=$row->busowner?></td>
                <td><a href="<?=$row->webaddress?>">Visit Site</a></td>
                <td>
                    <?php if(isset($row->photoname)):?>
                    no
                    <?php else:?>
                    yes
                    <?php endif?>

                </td>

                <td>
                    <?php if(isset($row->title)):?>
                    no
                    <?php else:?>
                    yes
                    <?php endif?>


                </td>
            </tr>
        <?php endforeach; ?>

</table>