2012-05-08 4 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

Я хочу присоединиться к таблицам, чтобы получить только значение ID из tblFacilityHrsDateTimes (так что, когда я редактирую таблицы, первая таблица 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 
Смежные вопросы