J'ai une table appelée indx_0 où je sélectionne toutes les combinaisons "pid" (id produit) avec "wid" (mot id) en les regroupant par produits qui correspondent au plus grand nombre de mots. Maintenant, puisque les mots réels sont stockés dans une table différente appelée "windex", la table indx_0 ne contient que l'ID de produit correspondant à l'ID du mot.select query + joindre des tables
Voici la requête courante que j'utilise pour obtenir les résultats.
SELECT pid, count(*) WordMatchCount
FROM indx_0
WHERE wid in (294, 20591, 330)
group by pid
order by WordMatchCount desc
limit 1000
recherche Indiquez I pour « carte mémoire ddr » Je ne vais pas obtenir le résultat qui contient « ddr3 » priorité sur tout autre mot-clé car il recherche de correspondance exacte. donc "carte mémoire ddr" et "carte mémoire téléphone" seraient traités comme égaux puisque ni "ddr3" ni "téléphone" ne sont égaux à ddr. Je veux utiliser join et LIKE (ou tout autre moyen préférable) pour permettre à "ddr" de correspondre très étroitement à "ddr3" ou "ddr2" pour le prioriser sur d'autres résultats où il n'y a pas de correspondance.
Voici les structures tableau:
CREATE TABLE IF NOT EXISTS `windex` (
`word` varchar(64) NOT NULL,
`wid` int(10) NOT NULL AUTO_INCREMENT
PRIMARY KEY (`wid`),
UNIQUE KEY `word` (`word`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=834922 ;
CREATE TABLE IF NOT EXISTS `indx_0` (
`wid` int(7) NOT NULL,
`pid` int(7) NOT NULL,
UNIQUE KEY `wid` (`wid`,`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Est-ce possible?
merci!
s'il vous plaît structure de la table menthion correctement – diEcho
ajouté la structure des tables – nick
est là aucune clé primaire dans 'indx_o' aussi me dire quelle est la table parent et qui est table enfant .. signifie en termes de« clé étrangère ». – diEcho