2009-08-13 12 views
0

J'essaie d'utiliser des tables temporaires pour stocker certaines valeurs dont j'ai besoin pour une requête. La raison de l'utilisation d'une table temporaire est que je ne veux pas stocker les données de façon permanente afin que les différents utilisateurs puissent les modifier en même temps. Ces données sont simplement stockées pendant une seconde, donc je pense qu'une table temporaire est la meilleure approche pour cela. Le fait est qu'il semble que la façon dont j'essaie de l'utiliser n'est pas correcte (la requête fonctionne si j'en utilise une permanente).MySql: Problème lors de l'utilisation d'une table temporaire

Voici un exemple de requête:

CREATE TEMPORARY TABLE SearchMatches (PatternID int not null primary key, Matches int not null) 
INSERT INTO SearchMatches (PatternID, Matches) 
VALUES ('12605','1'),('12503','1'),('12587','2'),('12456','1'), 
('12457','2'),('12486','2'),('12704','1'),(' 12686','1'), 
('12531','2'),('12549','1'),('12604','1'),('12504','1'), 
('12586','1'),('12548','1'),('12 530','1'),('12687','2'), 
('12485','1'),('12705','1') 

SELECT pat.id, signatures.signature, products.product, versions.version, builds.build, pat.log_file, sig_types.sig_type, pat.notes, pat.kb 
FROM patterns AS pat 
INNER JOIN signatures ON pat.signature = signatures.id 
INNER JOIN products ON pat.product = products.id 
INNER JOIN versions ON pat.version = versions.id 
INNER JOIN builds ON pat.build = builds.id 
INNER JOIN sig_types ON pat.sig_type = sig_types.id, SearchMatches AS sm 
INNER JOIN patterns ON patterns.id = sm.PatternID 
WHERE sm.Matches <> 0 
ORDER BY sm.Matches DESC, products.product, versions.version, builds.build 
LIMIT 0 , 50 

Toute suggestion?

Merci.

+0

Comment échoue-t-il précisément? – chaos

+0

Y at-il un message d'erreur lorsque vous essayez d'exécuter cette requête? – Brandon

+0

Veuillez également reformater votre message pour faciliter la lecture de la requête. – Brandon

Répondre

0

Je devine, mais je pense que la requête doit être:

SELECT pat.id, signatures.signature, products.product, versions.version, builds.build, pat.log_file, sig_types.sig_type, pat.notes, pat.kb 
FROM patterns AS pat 
INNER JOIN signatures ON pat.signature = signatures.id 
INNER JOIN products ON pat.product = products.id 
INNER JOIN versions ON pat.version = versions.id 
INNER JOIN builds ON pat.build = builds.id 
INNER JOIN sig_types ON pat.sig_type = sig_types.id 
INNER JOIN SearchMatches AS sm ON pat.id = sm.PatternID 
WHERE sm.Matches <> 0 
ORDER BY sm.Matches DESC, products.product, versions.version, builds.build 
LIMIT 0 , 50; 

ces deux lignes DonT me semble juste:

INNER JOIN sig_types ON pat.sig_type = sig_types.id, SearchMatches AS sm 
INNER JOIN patterns ON patterns.id = sm.PatternID 

Et si vous avez besoin de deux jointures avec la table patterns, je pense que vous devriez éviter de mélanger les séparations séparées par des virgules avec les clauses explicites JOIN.

0

Merci pour les réponses. C'est la solution que j'ai finalement obtenue:

CREATE TEMPORARY TABLE SearchMatches (PatternID int not null primary key, Matches int not null); 
INSERT INTO SearchMatches 
(PatternID, Matches) VALUES (12605, 1) 
, (12503, 1) 
, (12587, 2) 
, (12456, 1) 
, (12457, 2) 
, (12486, 2) 
, (12704, 1) 
, (12686, 1) 
, (12531, 2) 
, (12549, 1) 
, (12604, 1) 
, (12504, 1) 
, (12586, 1) 
, (12548, 1) 
, (12530, 1) 
, (12687, 2) 
, (12485, 1) 
, (12705, 1) ; 

SELECT pat.id 
, signatures.signature 
, products.product 
, versions.version 
, builds.build 
, pat.log_file 
, sig_types.sig_type 
, pat.notes 
, pat.kb FROM SearchMatches AS sm INNER JOIN patterns AS pat 
ON pat.id = sm.PatternID INNER JOIN signatures 
ON signatures.id = pat.signature INNER JOIN products 
ON products.id = pat.product INNER JOIN versions 
ON versions.id = pat.version INNER JOIN builds 
ON builds.id = pat.build INNER JOIN sig_types 
ON sig_types.id = pat.sig_type WHERE sm.Matches <> 0 ORDER BY sm.Matches DESC 
, products.product 
, versions.version 
, builds.build LIMIT 0 , 50; 
Questions connexes