2009-08-13 17 views
0

一時テーブルを使用してクエリに必要な値を格納しようとしています。一時テーブルを使用する理由は、データを永続的に保存したくないため、異なるユーザーが同時にデータを変更できるからです。そのデータはちょうど2秒間保存されるので、私は一時テーブルがこのための最良のアプローチだと思います。MySql:一時テーブルを使用しているときの問題

私はそれを使用しようとしている方法が正しいとは限りません(永久的なものを使用するとクエリが機能します)。

これは、クエリの例です:

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 

任意の提案?

ありがとうございました。

+0

どのくらい正確に失敗しますか? – chaos

+0

そのクエリを実行しようとすると、エラーメッセージはありますか? – Brandon

+0

また、投稿を再フォーマットして、クエリを読みやすくしてください。 – Brandon

答えて

0

- 私の推測が、私は、クエリがされるべきだと思う:右私には思えるの2行はいけない

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; 

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

そして、あなたが必要な場合は2が参加しますpatternsテーブルでは、カンマで区切って明示的にJOIN句で区切ってください。

0

返信いただきありがとうございます。これは私が最終的に得た解決策です:

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; 
関連する問題