tag php birçok alanda birçok ile arama

1 Cevap php

Ben bir brifing sistemi için bir arama motoru yapmak için çalışıyorum.

Ben ilişkileri temsil eden 3 veritabanları ile birçok ilişki tarzı kurulum için bir çok kullanıyorum.

comms_briefings is where the data is stored for the briefings search_tags is where the tags are stored briefings_tags is where the relationship is formed

i bir etiket daha brifing kez daha görünür eğer this code zaten Ancak, nedense bu veritabanı birden fazla kez aynı satırı döndürür ALMOST mükemmel var.

örneğin kullanıcı arayışları için eğer

$ "Complx sorular"

sistem iki eşleşen etiketleri var gibi iki etiket complx ve soruşturma olan herhangi bir satır döndürür. Ben sonuçları bir kez görünmesini ilk ve tek en sonuçlarını alır satır ile ZA sipariş olmak istiyorum.

herhangi bir fikir? :)

1 Cevap

Böyle bir şey yapmanız gerekir:

function searchTags($tags) {

    $tags = explode(' ', $tags);
    $tagIds = array();

    foreach($tags as $key) {
    	$sql = mysql_query("SELECT `id` FROM `search_tags` WHERE `tag` = '".$key."'");
    	while($r=mysql_fetch_object($sql))
    		$tagIds[] = $r->id;
    }

    $query = mysql_query("SELECT comms_briefings.*, COUNT(*) AS num
    	FROM comms_briefings, briefings_tags
    	WHERE briefings_tags.tag_id IN ('" . implode("','", $tagIds) ."') AND briefings_tags.briefing_id = comms_briefings.id
            GROUP BY comms_briefines.id
    	ORDER BY num DESC, `created` DESC"); 

    while($r = mysql_fetch_object($query)) {

    	$summation = preg_replace('^(.*)\n(.*)^', '$1\\n$2', $r->summation);
    	$summation = preg_replace('/[\r]+/', '', $summation);

    	echo '<li class="message unread" id="msg-'.$r->id.'">';
    	echo '<h3><a href="">'.$r->title.'</a></h3>';
    	echo '<ul class="details">
    			<li><span>Importance:</span> '.$r->importance.'</li>
    			<li><span>Date:</span> '.$r->created.'</li>
    			<li><span>Summary:</span> '.$summation.'</li>
    		 </ul>
    		 <div class="clr"></div>
    		 </li>';
    }
}

Tüm tagIds sonra id göre gruplandırma, brifingler tek bir sorgu yapmak, ilk olarak bir diziye çekilir.