J'essaie de joindre plusieurs tables et d'effectuer une recherche en texte intégral sur celles-ci.Recherche plein texte MySQL sur plusieurs tables avec différents champs
La plupart des tables ne sont pas liées mais ont des champs similaires.
J'ai eu les recherches fulltext fonctionnelles mais je dois être capable de créer des liens à partir des résultats qui est la prochaine étape mais je ne dilue pas k cela fonctionnera parce que je n'ai pas eu assez de champs pour obtenir assez d'info .
Fondamentalement, je veux rechercher le titre et le contenu de chaque table, mais je veux aussi rechercher mes tables de forum qui sont des sujets et des messages. Les tables de rubriques et de messages sont liées.
Cette requête va faire l'affaire sans interroger les tables du forum car il faut que je puisse rechercher ces tables.
SELECT * FROM (SELECT title, content,
MATCH(title, content) AGAINST('folk*' IN BOOLEAN MODE)
as score FROM news WHERE MATCH(title, content)
AGAINST('folk*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('folk*' IN BOOLEAN MODE)
as score FROM events WHERE MATCH(title, content)
AGAINST('folk*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('folk*' IN BOOLEAN MODE)
as score FROM blogs WHERE MATCH(title, content)
AGAINST('folk*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('folk*' IN BOOLEAN MODE)
as score FROM honeylands WHERE MATCH(title, content)
AGAINST('folk*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('folk*' IN BOOLEAN MODE)
as score FROM articles WHERE MATCH(title, content)
AGAINST('folk*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('folk*' IN BOOLEAN MODE)
as score FROM info WHERE MATCH(title, content)
AGAINST('folk*' IN BOOLEAN MODE)
UNION ALL
SELECT topicid as title, boardid as content,
MATCH(title, content) AGAINST('folk*' IN BOOLEAN MODE)
as score FROM articles WHERE MATCH(title, content)
AGAINST('folk*' IN BOOLEAN MODE)
UNION ALL
SELECT topicid as title, message as content,
MATCH(title, content) AGAINST('folk*' IN BOOLEAN MODE)
as score FROM info WHERE MATCH(title, content)
AGAINST('folk*' IN BOOLEAN MODE)) a ORDER BY score DESC
Je devrais être en mesure de créer des liens pour les tables qui ont des noms de champ commom tels que events.php? Id = 1 obtenir l'identifiant du dossier, mais comment pourrais-je faire pour les sujets des tables et des messages topic.php? boardid = 1 & topic = 2?
Voici ma structure de table CREATE TABLE articles
( id
int (4) NOT auto_increment NULL, title
varchar (70) NOT NULL default '', content
texte NOT NULL, clé primaire (id
) ) ;
CREATE TABLE `blogs` (
`id` int(3) NOT NULL auto_increment,
`title` varchar(100) NOT NULL default '',
`content` text NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `events` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(100) NOT NULL default '',
`content` text NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `honeylands` (
`id` int(4) NOT NULL auto_increment,
`title` varchar(100) NOT NULL default '',
`content` text NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `info` (
`id` int(1) NOT NULL auto_increment,
`title` varchar(50) NOT NULL default '',
`content` text NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `messages` (
`messageid` int(6) NOT NULL auto_increment,
`boardid` int(2) NOT NULL default '0',
`topicid` int(4) NOT NULL default '0',
`message` text NOT NULL,
`author` varchar(255) NOT NULL default '',
`postdate` datetime default NULL,
PRIMARY KEY (`messageid`)
);
CREATE TABLE `news` (
`id` int(4) NOT NULL auto_increment,
`title` varchar(100) NOT NULL default '',
`content` text NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `topics` (
`topicid` int(4) NOT NULL auto_increment,
`boardid` int(2) NOT NULL default '0',
`topicname` varchar(255) NOT NULL default '',
`author` varchar(255) NOT NULL default '',
`counter` int(5) NOT NULL default '0',
`sticky` char(1) NOT NULL default 'n',
`locked` char(1) NOT NULL default 'n',
PRIMARY KEY (`topicid`)
);
Voici comment je reçois actuellement tous les dossiers, mais il n'y a pas moyen d'ajouter des champs supplémentaires pour les tables sujets et messages à l'aide d'un UNION
SELECT * FROM (SELECT title, content,
MATCH(title, content) AGAINST('$keywords*' IN BOOLEAN MODE)
as score FROM news WHERE MATCH(title, content)
AGAINST('$keywords*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('$keywords*' IN BOOLEAN MODE)
as score FROM events WHERE MATCH(title, content)
AGAINST('$keywords*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('$keywords*' IN BOOLEAN MODE)
as score FROM blogs WHERE MATCH(title, content)
AGAINST('$keywords*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('$keywords*' IN BOOLEAN MODE)
as score FROM honeylands WHERE MATCH(title, content)
AGAINST('$keywords*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('$keywords*' IN BOOLEAN MODE)
as score FROM articles WHERE MATCH(title, content)
AGAINST('$keywords*' IN BOOLEAN MODE)
UNION ALL
SELECT title, content,
MATCH(title, content) AGAINST('$keywords*' IN BOOLEAN MODE)
as score FROM info WHERE MATCH(title, content)
AGAINST('$keywords*' IN BOOLEAN MODE)
UNION ALL
SELECT topicname as title,message as content,
MATCH(topicname, message) AGAINST('$keywords*' IN BOOLEAN MODE)
as score FROM topics t INNER JOIN messages m ON t.topicid=m.topicid
WHERE MATCH(topicname, message)
AGAINST('$keywords*' IN BOOLEAN MODE)) a ORDER BY score DESC
Avez-vous un code d'exemple de la façon dont vous l'avez fait? Avez-vous utilisé plusieurs requêtes? – AdRock
auriez-vous plusieurs requêtes pour chaque table puis ajouter au tableau? – AdRock
Je voudrais avoir au moins 1 requête pour chaque table, les résultats de chaque étant mis dans un tableau. –