Ben bilgi almak için gerekli sorgu sayısını azaltmak için bir MySQL SELECT deyimi olarak aşağıdakini yazmak istiyorum, ama bunu yazmak nasıl emin değilim.
Etiketleri ve books_tags (bir çok-çok ilişkisi birleşim tablosu) - İki tablo var. Ben aşağıdaki gibi istediğiniz nihai çıktı yazdırmak istiyorum:
<label for="formFiltertag1"><input type="checkbox" name="tag[]" value="1" id="formFiltertag1" class="rank90" /> PHP (15)<br /></label>
Metin etiketi (tags.name) adıdır ve Pars numaralı etiketin kimliği (COUNT (books_tags.tag_id)) kavşak tabloda görünen ne kadar sık sayısı nerede. Giriş kimliği ve değeri tags.id alanına göre dinamik olacak.
Ben aslında ben sadece etiket tablodan tüm bilgi alır bir sorgu çalıştırmak ve ardından her biri için ayrı bir sayım sorguyu çalıştırmak için bir foreach döngüsü kullanmayı düşündüm, ama etiketleri onlar sayı olarak hızlı bir şekilde hantal alabilir büyür.
İşte ben bunu (CodeIgniter'ın ActiveRecord desen kullanarak) şimdi yazdım gibi bir örnek ...
Model:
function get_form_tags() {
$query = $this->db->get('tags');
$result = $query->result_array();
$tags = array();
foreach ($result as $row) {
$this->db->select('tag_id')->from('books_tags')->where('tag_id', $row['id']);
$subResult = $this->db->count_all_results();
$tags[] = array('id' => $row['id'], 'tag' => $row['tag'], 'count' => $subResult);
}
return $tags;
}
Kontrolör:
function index() {
$this->load->model('browse_model', 'browse');
$tags = $this->browse->get_form_tags();
$data['content'] = 'browse/browse';
$data['tags'] = $tags;
$this->load->view('global/template', $data);
}
View (yoğunlaştırılmış):
<?php foreach ($tags as $tag) : ?>
<label for="formFiltertag<?php echo $tag['id'] ?>"><input type="checkbox" name="tag[]" value="<?php echo $tag['id'] ?>" id="formFiltertag<?php echo $tag['id'] ?>" class="rank<?php echo $tag['count'] ?>" /> <?php echo $tag['tag'] . ' (' . $tag['count'] . ')' ?><br /></label>
<?php endforeach; ?>
Bu çalışır, ama dediğim gibi bu işi halletmek için gereken yol daha sorgular oluşturmak için gidiyor söyledim. Elbette daha iyi bir yolu var. Ne düşünüyorsun?
Thanks much, Marcus