2012-05-08 38 views
1

我有兩個表是這樣的:表聯接SQL/PHP(CRUD)

[tblFacilityHrs] id uid title description 
[tblFacilityHrsDateTimes] id owner_uid startEventDate endEventDate startTime endTime days recurrence finalDate 

他們是一個一對多的關係,通過UID的方式: enter image description here

enter image description here

我想加入表格,以便我只從tblFacilityHrsDateTimes獲取ID值(這樣,當我編輯表格時,第一個表tblFacilityHrs被UID編輯,tblFacilityHrsDateTimes通過ID編輯)。

我該如何加入表格以便可以用這種方式編輯它們?

事情是這樣的:

<?php 
include('../config.php'); 
if (isset($_GET['uid'])) { 
$uid = (int) $_GET['uid']; 
$id = (int) $_GET['id']; 
if (isset($_POST['submitted'])) { 
foreach($_POST AS $key => $value) { $_POST[$key] = mysql_real_escape_string($value); } 

//Query for tblFacilityHrs 
$sql = "`title` = '{$_POST['title']}' , `description` = '{$_POST['description']}' WHERE `uid` = '$uid' "; 
mysql_query($sql) or die(mysql_error()); 

//Query for tblFacilityHrsDateTimes 
$sql2 = "`startEventDate` = '{$_POST['startEventDate']}' , `endEventDate` = '{$_POST['endEventDate']}' , `startTime` = '{$_POST['startTime']}', `endTime` = '{$_POST['endTime']}' , `days` = '{$_POST['days']}' , `recurrence` = '{$_POST['recurrence']} , `finalDate` = '{$_POST['finalDate']}' WHERE `id` = '$id' "; 
mysql_query($sql2) or die(mysql_error()); 

echo (mysql_affected_rows()) ? "Edited row.<br />" : "Nothing changed. <br />"; 
echo "<a href='list.php'>Back</a>"; 
} 
$row = mysql_fetch_array (mysql_query("SELECT * FROM `tblFacilityHrs` WHERE `uid` = '$uid'")); 
$row2 = mysql_fetch_array(mysql_query("SELECT * FROM `tblFacilityHrsDateTimes` WHERE `id` = '$id'")); 
?> 

在我腦子裏,我想象中的表加入這樣的(但它不工作):

$result = mysql_query("SELECT uid, title, description FROM tblFacilityHrs LEFT JOIN tblFacilityHrsDateTimes ON tblFacilityHrs.uid = tblFacilityHrsDateTimes.owner_uid ORDER BY tblFacilityHrs.description") or trigger_error(mysql_error()); 
+0

您的代碼易受SQL注入攻擊。你真的**應該使用準備好的語句,將你的變量作爲參數傳遞給你,這些參數不會被SQL評估。如果你不知道我在說什麼,或者如何解決它,請閱讀[Bobby Tables](http://bobby-tables.com)的故事。另外,如果沒有解釋「不起作用」是什麼,那麼您在帖子末尾提出的查詢「不起作用」。你有錯誤嗎?如果是這樣,那是什麼?如果不是,結果與你的期望有什麼不同? – eggyal

+0

我準備在未來的聲明我還沒有到那一點。我一次只做一件事,以便調試。至於加入,如果我使用最後一個代碼塊,它只會顯示來自tblFacilityHrs的信息 - 像這樣:http://i.imgur.com/XP5Yj.png –

+0

但是你的'SELECT'語句只選擇明確命名的三列來自'tblFacilityHrs' ...爲什麼你會期望結果集中的其他內容?或者我在這裏錯過了什麼? – eggyal

回答

2

升級到一個答案

您需要從tblFacilityHrsDateTimes中選擇列到您的結果集中:

SELECT  uid, title, description, tblFacilityHrsDateTimes.* 
FROM  tblFacilityHrs 
    LEFT JOIN tblFacilityHrsDateTimes 
     ON tblFacilityHrs.uid = tblFacilityHrsDateTimes.owner_uid 
ORDER BY tblFacilityHrs.description