Bir sayfa etiketleme yerel web sayfaları için arama seçeneği oluşturmak

2 Cevap php

Benim asıl soru nasıl bu sitede olduğu gibi, belirli bir sayfaya sevk edecektir etiketleri kapalı bir otomatik tamamlama açılan oluşturma hakkında gitmek istiyorum.

I already have a autocomlete dropdown and it looks in the db field for a word starting with something% (wildcard),but that is just one word

What if you would have like 5 tags, comma seperated like tag1, tag2, tag3, etc, in one field that will refer to one particular page. How would you start the query looking for tags starting with the letter F for example, extract them and put them in the dropdownlist and also get the url from the url field at the same time ofcourse.

and also by typing two or more tags, the results should get more precise

Bunlar sadece benim kendi düşünceleri vardır, ben bu başarırsınız için en iyi yolu ne olurdu çözemedim.

EDIT I used the information below to cook something up like this. I still have to make a page with the search results, so this is by long not ready.

CREATE TABLE tag_targets (
  tag_target_id MEDIUMINT UNSIGNED NOT NULL auto_increment,
  tag_target_naam varchar(30) NOT NULL,
  tag_target_url varchar(255) NOT NULL,
  PRIMARY KEY  (tag_target_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE tags (
  tag_id MEDIUMINT UNSIGNED NOT NULL auto_increment,
  tag varchar(30) NOT NULL,
  PRIMARY KEY  (tag_id),
  UNIQUE KEY tag (tag)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE target_tag (
  tag_target_id MEDIUMINT UNSIGNED NOT NULL,
  tag_id MEDIUMINT UNSIGNED NOT NULL,
  FOREIGN KEY (tag_target_id) REFERENCES tag_targets(tag_target_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


$q = "SELECT t1.tag_target_url,t2.tag FROM tag_targets AS t1,tags AS t2, target_tag AS t3 WHERE t1.tag_target_id = t3.tag_target_id AND t2.tag_id = t3.tag_id AND tag LIKE '$queryString%' LIMIT 10";

teşekkürler, Richard

2 Cevap

Herhalde o sayfa için tek bir alanda etiketleri (virgülle ayrılmış) ama "etiketleri" tablosunu olmazdı:

tags:
ID | name
---------
 1 | tag1
 2 | tag2
 3 | tag3
 4 | tag4


page_tags:
page_id | tag_id
----------------
      1 | 2 
      1 | 3
      2 | 1
      3 | 4
      3 | 3

Eğer basit bir şekilde herhangi bir etiket için sorgulamak, ve de herhangi eşleşen sayfaları alabilirsiniz.

Örneğin, eğer kullanıcı türleri "TAG3" it sayfa 1 ve 3 maç olur, ama "tag2, TAG3" (ya da "TAG3, tag2" - sipariş alakasız) sadece sayfa 1 maç olacaktır.

Yukarıda örnek SQL sorgusu:

SELECT 
    page_tags.page_id
FROM
    page_tags INNER JOIN tags
    ON page_tags.tag_id=tags.id
WHERE
    tags.name IN ('tag3', 'tag2') 
GROUP BY
    page_id HAVING count(page_tags.tag_id) = 2

Ben otomatik tamamlama alanları yapmak için jQuery kullanmak tavsiye ederim. Onları yapmak için iyi bir arayüzü var:

http://docs.jquery.com/Plugins/Autocomplete