2012-06-13 57 views
1

我有三個表(個人,組&記錄標籤),並希望使用它們之間的信息來製作記錄標籤中的人員列表。例如:它應該找到公司ID爲#的個人和組,並列出它們。如何在沒有重複結果的情況下正確創建它?3表= 1列表(已解決)

// Connect to database 
include "mysqli_connect.php"; 

// Set variables 
$url_num = $_GET['company_id']; 
$company_num = ""; 
$company_members = ""; 
$company_members2 = ""; 

//Check for artist id pagination 
if(is_numeric($url_num)){ 
    $company = intval($url_num); 
}else{ 
    $company = 1; 
} 

// Construct our join query 
$sqli = "SELECT DISTINCT * FROM recordlabels 
INNER JOIN individuals ON individuals.companyID=recordlabels.companyID 
INNER JOIN groups ON groups.companyID=recordlabels.companyID 
WHERE recordlabels.companyID = '{$company}'"; 

// Create results 
$result = mysqli_query($link, $sqli); 

//Check for albums 
$totalmembers = mysqli_num_rows($result); 

// Checking if query is successful 
if($result){ 

// Print out the contents of each row into a table 
while($row = mysqli_fetch_array($result, MYSQLI_BOTH)){ 

// Assign value of column if not empty, otherwise "DamJuNoImage" (Thanks to Jonathan Sampson from Stack Overflow) 
    $companyen = empty($row["companyen"]) 
     ? "Unknown" 
     : $row["companyen"]; 
    $companyko = empty($row["companyko"]) 
     ? "Unknown" 
     : $row["companyko"]; 
    $companyType = empty($row["companyType"]) 
     ? "Unknown" 
     : $row["companyType"]; 
    $founded = empty($row["established"]) 
     ? "Unknown" 
     : $row["established"]; 
    $founder = empty($row["companyFounder"]) 
     ? "Unknown" 
     : $row["companyFounder"]; 
    $information = empty($row["information"]) 
     ? "Unknown" 
     : $row["information"]; 
    $location = empty($row["companyLocation"]) 
     ? "Unknown" 
     : $row["companyLocation"]; 
    $homepage = empty($row["companyPage"]) 
     ? "#" 
     : $row["homepage"]; 
    $solopic = empty($row["solopic"]) 
     ? "DamjuNoImage" 
     : $row["solopic"]; 
    $soloen = empty($row["soloen"]) 
     ? "Unknown" 
     : $row["soloen"]; 
    $solokn = empty($row["solokn"]) 
     ? "Unknown" 
     : $row["solokn"]; 
    $grouppic = empty($row["grouppic"]) 
     ? "DamjuNoImage" 
     : $row["grouppic"]; 
    $groupen = empty($row["groupen"]) 
     ? "Unknown" 
     : $row["groupen"]; 
    $groupkn = empty($row["groupkn"]) 
     ? "Unknown" 
     : $row["groupkn"]; 
    $company_members .= '<li><a href="#"> 
     <div class="image"><img src="pathhere/' . $solopic . '"></div> 
     <p class="datatitle2">' . $soloen . '</p> 
     <p class="data-info2">' . $solokn . '</p> 
     </a></li>'; 
    $company_members2 .= '<li><a href="#"> 
     <div class="image"><img src="pathhere' . $grouppic . '"></div> 
     <p class="datatitle2">' . $groupen . '</p> 
     <p class="data-info2">' . $groupkn . '</p> 
     </a></li>'; 
    $listofmembers = $company_members . $company_members2; 
} // End of while statement 
}else{ 
    echo "No people under $companyen"; 
} // End of If statement 

給(希望)更好的視覺效果。

  • 鮑勃(個人)
  • 麗莎(個人)
  • 工坊(集團)

尋求幫助之前,我測試了這樣的結果:

  • 鮑勃(個人)
  • 麗莎(個人)
  • 工坊(集團)
  • 工坊(集團)

那是因爲我把個人和羣體的輸出在自己獨立的價值。然後我回應我認爲會出錯的$var1 . $var2

更新:如果沒有人能弄明白,我會重做我的數據庫和表格。謝謝你試圖幫助的所有人。

+5

'SELECT DISTINCT <實field-list> FROM ...'而不是'SELECT * FROM ...' –

+0

@EugenRieck是對的,但你真的應該問一個問題,以便我們知道你想要什麼。 – Rufinus

+0

大聲笑哎呀我被吸進解釋並忘了添加問題 – taeja87

回答

1

該問題很可能來自您的SQL代碼。具體而言,您似乎有一些非規範化,與companyId兩個individualgroup,並individualgroupId外鍵。

鑑於這種關係,你最想沿着這些線路寫你的語句:

SELECT companyEn, companyKo, companyType, established, companyFounder, 
     information, companyLocation, companyPage, 
     soloPic, soloEn, soloKn, 
     groupPic, groupEn, groupKn 
FROM recordLabels 
JOIN groups 
ON groups.companyId = recordLabels.companyId 
JOIN individuals 
ON individuals.groupId = groups.groupId 
WHERE recordLabels.companyId = $company 

其他小的筆記:
從我聽到的,最好的做法通常給表奇異名,不是複數。
怎麼了....En...Ko列?在我看來,您可能正在做一些國際化(英語和韓語?) - 如果是這樣,您將要從原始表格中提取這些列,並啓動翻譯表。如果您稍後需要添加對其他語言的支持,這將對您極大地幫助


編輯:

儘管有多種方式來處理轉換表,你可能想每一個需要翻譯的數據表的一個轉換表。你也可能會想要一個標準的語言表以供參考:

​​

recordLabel爲例:

1)創建你的翻譯表,與將所有需要的列被翻譯:

recordLabelTranslation 
===================== 
companyId -- fk to recordLabel.companyId, or whatever the primary key of that table is 
languageId -- fk to language.id 
company -- whatever 'companyEn' and 'companyKo' was (company name? why translate?) 

2)取出被翻譯的所有列(companyEncompanyKo

3)(可選)代碼建立一個視圖,以便您可以輕鬆參考。有兩種形式:

- >簡單連接的語言

CREATE VIEW Record_Label_Language as 
SELECT recordLabel.companyId, recordLabel.information, -- all current columns... 
     recordLabelTranslation.languageId, recordLabelTranslation.company 
FROM recordLabel 
JOIN recordLabelTranslation 
ON recordLabelTranslation.companyId = recordLabel.companyid 

- >加入的語言,默認爲英語(或其他語言)

CREATE VIEW Record_Label_Language_Default as 
SELECT recordLabel.companyId, recordLabel.information, -- all current columns... 
     COALESCE(recordLabelTranslation.languageId, language.languageId), 
     COALESCE(recordLabelTranslation.company, dflt.company) 
FROM recordLabel 
JOIN recordLabelTranslation as dflt 
ON dflt.companyId = recordLabel.companyid 
AND dflt.languageId = [englishLanguageId] 
CROSS JOIN language 
LEFT JOIN recordLabelTranslation 
ON recordLabelTranslation.companyId = recordLabel.companyId 
AND recordLabelTranslation.languageId = language.id 
+0

正確。 En是英文,Ko是韓文。翻譯表?那麼有一張英文表和另一張韓文表? – taeja87

+0

我只是試圖找到一種方法來將我的個人和組表合併爲一個表。我會聽從你的建議。謝謝。 – taeja87

+0

...爲什麼?個人是一個羣體(我有點懷疑)?從標準化的設計開始,僅出於性能原因(即使不是那麼簡單)來反規範化。 –