2012-05-20 37 views
0

其棘手的解釋我想這樣在這裏做相交變 我有一個Excel電子表格導出2個表。電子表格定義原因和effects.It具有參考3分,所以我不能讓它變成1臺從2個表中選擇數據,其中多個列和行用「X」

此電子表格事件下來左側和效果翻過頂部的列表。通過在與事件匹配的行/列中插入一個X來相互關聯這些對象。所以相交的列/行形成一個矩陣。因此,例如一個事件可能是。 '打開lightswitch'。沿着這一行,直到找到'X'。然後按照列向上的效果,它顯示「燈打開」(它比現實中的一點點複雜)可以有多個由X在同一行中定義的效果

我的想法是在where語句中使用table1。*和table2。*但我正在尋找通配符來搜索行/列,但經過研究,這在mysql中是不可能的。使用或所有的進一步行/列組合不會工作,因爲它只是顯示了所有與X中的一切

我有點難倒如何查詢表中的X行/進行搜索所有的X後顯示查詢的下面一個查詢是成功的,但我需要只有量變到質變的查詢「%示例%」部分搜索table1.1-60 table2.2-61爲「X」的occurrances在網頁的MySQL/PHP類型表格,然後在另一頁上顯示結果

任何建議/替代品歡迎感謝

SELECT 
table1.equipment, 
table1.tagno, 
table2.equipment, 
table2.action, 
table2.service, 
table2.tagno 
FROM 
table1 , 
table2 
WHERE 
table1.tagno LIKE '%example%' AND 
table1.1 = 'X' AND 
table2.2 = 'X' 
+0

是否重新模型數據的選項?我會考慮用連接表爲事件和效果分開表來描述X的位置。 – f1sherman

回答

1

有我S無以table2table1聯接列NN+1柱自然的方式;你必須「手工」指定連接(或者在一個程序中,兩者都會很難看)。

你想:

select * from table1 t1, table2 t2 
where t1.tagno like '%example%' AND t1.1 ='X' and t2.2 = 'X' 
UNION 
select * from table1 t1, table2 t2 
where t1.tagno like '%example%' AND t1.2 ='X' and t2.3 = 'X' 
UNION 
-- ... 

這可能是非常低效的。正如評論中所建議的那樣,重構數據將爲您提供更清晰的查詢和更美好的未來。

+0

我沒有任何問題重新數據。所以你的意思是將兩張桌子上的60x61矩陣分解到它自己的表格中。這是否意味着你的連接表 – user1406110

0

爲了讓更深入地瞭解我的建議,我將重新模型中的數據,像這樣:

CREATE TABLE effects (
     id INT, 
     name VARCHAR(100) 
     ); 

CREATE TABLE events (
     id INT, 
     name VARCHAR(100) 
     ); 

CREATE TABLE effects_events (
     effect_id INT, 
     event_id INT 
     ); 

effects_events是Junction Table

所以,你可以查詢它是這樣的:

SELECT * FROM events WHERE events.id = effects_events.event_id AND effects_events.effect_id = effects.id AND effects.name = 'light turns on'; 

或者:

SELECT * FROM effects WHERE effects.id = effects_events.effect_id AND effects_events.event_id = events.id AND events.name = 'turn on lightswitch'; 

我可能會誤解你的問題,但這似乎是對我來說最直接的解決方案。