2009-09-21 6 views
0

Ma question est de savoir comment créer une liste déroulante de saisie semi-automatique qui renvoie à une page particulière, comme sur ce site.créer une option de recherche pour les pages Web locales en marquant une page

J'ai déjà un menu déroulant autocomlete et il semble dans le domaine db pour un mot commençant par quelque chose% (wildcard), mais qui est juste un mot

Que faire si vous auriez comme 5 balises, virgule séparée comme tag1, tag2, tag3, etc, dans un champ qui se référera à une page particulière. Comment voulez-vous démarrer la requête à la recherche de tags commençant par la lettre F par exemple, les extraire et les mettre dans la liste déroulante et aussi obtenir l'URL du champ url en même temps bien sûr.

et aussi en tapant deux ou plusieurs balises, les résultats devraient obtenir plus précis

Ce ne sont que mes propres pensées, je ne l'ai pas compris quelle serait la meilleure façon de acomplish cela.

EDIT J'ai utilisé les informations ci-dessous pour faire cuire quelque chose comme ceci. Je dois encore faire une page avec les résultats de la recherche, donc c'est de loin pas prêt.

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"; 

merci, Richard

+0

regardant votre requête SQL, il renvoie des objectifs qui correspondent à l'une des balises entrées (OR), et pas tous (balise1 ET tag2) –

+0

I sachez, votre syntaxe est meilleure. J'essayais juste d'essayer, si je me souviens comment fonctionnait la syntaxe. Dommage, les sous-sélections ne sont pas autorisées. Au fait, je l'ai fait avant que je vois que vous avez édité votre réponse. – Richard

Répondre

1

je ne serais probablement pas les étiquettes dans un seul champ pour cette page (séparées par des virgules), mais une table "tags":

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 

vous pouvez interroger pour d'une manière simple, et obtenez également toutes les pages correspondantes.

Par exemple, si les types d'utilisateurs "tag3" il correspondrait à la page 1 et 3, mais "tag2, tag3" (ou "tag3, tag2" - l'ordre) correspondra uniquement à la page 1.

Exemple requête SQL pour ce qui précède:

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 
+0

merci, cela aide – Richard

+0

merci pour la syntaxe sql - pour obtenir tag3 et tag2 dans le sql de la taxtbox, je dois probablement utiliser une sorte de fonction split split, exploser(), split(), je devine? – Richard

+0

probablement - cela dépendra de la façon dont les données sont utilisées/transformées du côté client (navigateur) ou du serveur - il y a donc plusieurs façons d'atteindre le même résultat –

Questions connexes