2010-05-06 48 views
1

其實我試圖從基於多個連接的elgg數據庫獲取數據。它用很多JOIN語句生成了非常大的查詢,並且查詢從不迴應。是否有限制「連接」或「哪裏」或SQL查詢的長度?

SELECT distinct e.* from test_entities e 
JOIN test_metadata m1 on e.guid = m1.entity_guid 
JOIN test_metastrings ms1 on ms1.id = m1.name_id 
JOIN test_metastrings mv1 on mv1.id = m1.value_id 
JOIN test_objects_entity obj on e.guid = obj.guid 
JOIN test_metadata m2 on e.guid = m2.entity_guid 
JOIN test_metastrings ms2 on ms2.id = m2.name_id 
JOIN test_metastrings mv2 on mv2.id = m2.value_id 
JOIN test_metadata m3 on e.guid = m3.entity_guid 
JOIN test_metastrings ms3 on ms3.id = m3.name_id 
JOIN test_metastrings mv3 on mv3.id = m3.value_id 
JOIN test_metadata m4 on e.guid = m4.entity_guid 
JOIN test_metastrings ms4 on ms4.id = m4.name_id 
JOIN test_metastrings mv4 on mv4.id = m4.value_id 
JOIN test_metadata m5 on e.guid = m5.entity_guid 
JOIN test_metastrings ms5 on ms5.id = m5.name_id 
JOIN test_metastrings mv5 on mv5.id = m5.value_id 
JOIN test_metadata m6 on e.guid = m6.entity_guid 
JOIN test_metastrings ms6 on ms6.id = m6.name_id 
JOIN test_metastrings mv6 on mv6.id = m6.value_id 

where ms1.string='expire_date' and mv1.string <= 1272565800 and ms2.string='homecity' and 
mv2.string LIKE "%dasf%" and ms3.string='schoolname' and mv3.string LIKE "%asdf%" 

and ms4.string='award_amount' and mv4.string <= 123 and ms5.string='no_of_awards' and mv5.string <= 7 and ms6.string='avg_rating' and mv6.string <= 2 and e.type = 'object' 
and e.subtype = 5 and e.site_guid = 1 and (obj.title like '%asdf%') OR (obj.description like '%asdf%') 

and ((e.access_id = -2 AND e.owner_guid IN (SELECT guid_one FROM test_entity_relationships WHERE relationship='friend' AND guid_two=5)) OR (e.access_id IN (2,1) OR (e.owner_guid = 5) OR (e.access_id = 0 AND e.owner_guid = 5)) and e.enabled='yes') 

and ((m1.access_id = -2 AND m1.owner_guid IN (SELECT guid_one FROM test_entity_relationships WHERE relationship='friend' AND guid_two=5)) OR (m1.access_id IN (2,1) OR (m1.owner_guid = 5) OR (m1.access_id = 0 AND m1.owner_guid = 5)) and m1.enabled='yes') 

and ((m2.access_id = -2 AND m2.owner_guid IN (SELECT guid_one FROM test_entity_relationships WHERE relationship='friend' AND guid_two=5)) OR (m2.access_id IN (2,1) OR (m2.owner_guid = 5) OR (m2.access_id = 0 AND m2.owner_guid = 5)) and m2.enabled='yes') 

and ((m3.access_id = -2 AND m3.owner_guid IN (SELECT guid_one FROM test_entity_relationships WHERE relationship='friend' AND guid_two=5)) OR (m3.access_id IN (2,1) OR (m3.owner_guid = 5) OR (m3.access_id = 0 AND m3.owner_guid = 5)) and m3.enabled='yes') 

and ((m4.access_id = -2 AND m4.owner_guid IN (SELECT guid_one FROM test_entity_relationships WHERE relationship='friend' AND guid_two=5)) OR (m4.access_id IN (2,1) OR (m4.owner_guid = 5) OR (m4.access_id = 0 AND m4.owner_guid = 5)) and m4.enabled='yes') 

and ((m5.access_id = -2 AND m5.owner_guid IN (SELECT guid_one FROM test_entity_relationships WHERE relationship='friend' AND guid_two=5)) OR (m5.access_id IN (2,1) OR (m5.owner_guid = 5) OR (m5.access_id = 0 AND m5.owner_guid = 5)) and m5.enabled='yes') 

and ((m6.access_id = -2 AND m6.owner_guid IN (SELECT guid_one FROM test_entity_relationships WHERE relationship='friend' AND guid_two=5)) OR (m6.access_id IN (2,1) OR (m6.owner_guid = 5) OR (m6.access_id = 0 AND m6.owner_guid = 5)) and m6.enabled='yes') 

order by obj.title limit 0, 10 

這是我正在運行的查詢。

+1

您可以重新格式化您的SQL,以便它有一些換行符,沒有人想讀一行很長的行。 – 2010-05-06 13:14:07

+0

謝謝你們告訴我,它完成了。並感謝Lucero,使它更具可讀性 – 2010-05-06 13:20:25

回答

3

問這樣的問題通常會指出您的模式設計中存在問題。看起來您可能正在使用Entity Attribute Value模式。

+1

+1「如果你的查詢太複雜了,你做錯了」 – 2010-05-06 13:21:56

+0

http://docs.elgg.org/wiki/DatabaseSchema這是Elgg的模式。 – 2010-05-06 13:33:01

相關問題