在下面的代碼中,我主要在做我想做的事情,我正在查詢屬性表,該表通過會場屬性錶鏈接到「場地」表,以提供多對多。如何使用此代碼查詢同一個表兩次(保留GROUP_CONCAT)?
我這樣做是爲了提高在單個場地頁面上顯示大型列表時的性能,其中我使用工廠來加載場地對象。到目前爲止,這個新通話爲我節省了很多時間。
首先我想知道爲什麼我必須使用DISTINCT和GROUP_CONCAT來避免在a.name下的每個場所顯示多個值?我沒有看到它加入了兩次?
我的第二個挑戰是檢索屬性表中保存的評估值,與GROUP_CONCAT返回值分開。 (我把表結構放在查詢的下面)。該評級在GROUP_CONCAT(a.name)值內返回,但每個場所只有一個,我需要在select語句內的單獨列(如a.rating)中顯示它。我應該在場地表中保留評分值,如果它不容易檢索 - 但我有興趣瞭解MYSQL能做什麼,而且我的技術水平相當基本。
謝謝你的時間。
SELECT v.venue_id, v.name, v.suburb, v.venue_email, v.venue_phone, GROUP_CONCAT(DISTINCT a.name) AS attributes, v.review_count, vi.image_thumb_path
FROM venues AS v
LEFT JOIN venue_attribute AS va ON v.venue_id = va.venue_id
LEFT JOIN attribute AS a ON a.att_id = va.attribute_id
LEFT JOIN venue_review AS vr ON vr.venue_id = v.venue_id
LEFT JOIN venue_image AS vi ON vi.venue_id = v.venue_id
WHERE v.status = 1
GROUP BY v.name;
Table attribute
===============
att_id, type, name, abbreviation, synonyms, description, scope
---------------
att_id int(11) PK
type enum('transport','purpose','parking','site_control','authorisations','permissions','facilities','rating')
name varchar(255)
abbreviation varchar(32)
synonyms varchar(255)
description mediumtext
scope enum('global')
如果一個場地只有一個屬性值,但場地和屬性之間存在一對多關係,哪一行是評級?他們全部? – Ami 2012-03-25 10:32:47
@Ami,我認爲我的問題的這個子集回答你的問題? 「我正在查詢一個屬性表,通過一個場地表屬性表連接到'場地'表格,給出了多對多的」 – SaminOz 2012-03-25 12:04:40
答案是? – Ami 2012-03-25 12:30:00