Форум → Программирование → PHP для идиотов → Связать 3 таблицы
Связать 3 таблицы
-
Здравствуйте уважаемые эксперты!
Подскажите, каким образом лучше связать 4 таблицы из БД, точнее сделать это одним запросом.
Таблицы собственно следующие:
1. users
[table border=1]
[tr]
[td]id[/td]
[td]u_name[/td]
[/tr]
[/table]
2. test1
[table border=1]
[tr]
[td]user_id[/td]
[td]test1_id[/td]
[/tr]
[/table]
3. test2
[table border=1]
[tr]
[td]test2_id[/td]
[td]course_id[/td]
[/tr]
[/table]
4. course
[table border=1]
[tr]
[td]c_id[/td]
[td]c_name[/td]
[/tr]
[/table]
Собственно, нужно извлечь из 1-й таблицы name юзера.
Из 2-й мы берем test1_id, если user_id = id из 1-й таблицы и сравниваем с test2_id из 3-й таблицы. Если есть запоминаем course_id.
Из 4-й берем c_name, сравнивая c_id с course_id.
На выходе u_name(из 1-й) и c_name(из 4-й)
Вот так вот… -
-
3 ноября 2009 г. 11:49, спустя 4 минуты 26 секунд
надо какого-то конкретного u_name? связь я понял, а условие нетhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
3 ноября 2009 г. 11:55, спустя 6 минут 17 секунд
Если всех u_name+c_name, то
SELECT
u.u_name, c.c_name
FROM users AS u
LEFT JOIN test1 AS t1
ON t1.user_id = u.id
LEFT JOIN test2 AS t2
ON t1.test1_id = t2.test2_id
LEFT JOIN course AS c
ON t2.course_id = c.c_idhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
3 ноября 2009 г. 11:58, спустя 2 минуты 31 секунду
Есть таблица юзеров, в которых имя, фамилия…
Есть таблица с указанием user_id, в которой есть некая переменная.
Эту переменную нужно сравнить в третьей таблице, в которой номер курса = переменной.
А в четвертой таблице название курса и айди курса. И как вы уже догадались, номер курса из третьей таблицы и есть айди курса.
Мне нужно вывести список пользователей и их курсы…
Джойнами добился лишь связи 3-х таблиц… не получается что то…
З.Ы. злоебучий Мудл, сорри за оффтоп) -
3 ноября 2009 г. 12:07, спустя 9 минут 33 секунды
пора на следующий уровень переходить, а то бушь дальше такие вопросы задавать =)))))Сапожник без сапог -
3 ноября 2009 г. 12:11, спустя 3 минуты 47 секунд
эээ, задача даже немного усложнилась…Спустя 95 сек.Есть таблица юзеров, в которых имя, фамилия…
Есть таблица с указанием user_id, в которой есть некая переменная.
Эту переменную нужно сравнить в третьей таблице, в которой айди третьей таблицы = переменной. Если равно, взять из третьей таблицы номер курса и идем на четвертую таблицу.
А в четвертой таблице название курса и айди курса. И как вы уже догадались, номер курса из третьей таблицы и есть айди курса.
Вот точно отображает то, чего мне надоманама)
Дуд, я не вкурил, что ты имел ввиду) -
3 ноября 2009 г. 12:12, спустя 1 минуту 5 секунд
relictx, мой запрос не подходит?https://smappi.org/ - платформа по созданию API на все случаи жизни -
3 ноября 2009 г. 12:13, спустя 40 секунд
А еще мужик из Австралии когда писал мудл точно был обкуренный садист) -
3 ноября 2009 г. 12:14, спустя 45 секунд
Что такое "мудл"?https://smappi.org/ - платформа по созданию API на все случаи жизни -
-
3 ноября 2009 г. 12:24, спустя 8 минут 42 секунды
вот я накидал говнокод, но последний запрос в запросе не пашет… Первый запрос правильный и отображает переменную из 3-й таблицы…
<table border=1>
<tr>
<th>Login</th>
<th>Username</th>
<th>Course</th>
</tr>
<?
$sql_users="SELECT mdl_user.firstname as first, mdl_user.lastname as last, mdl_context.contextlevel as cour
FROM mdl_context, mdl_user
LEFT JOIN mdl_role_assignments
ON mdl_user.id=mdl_role_assignments.userid
WHERE ((mdl_role_assignments.userid=mdl_user.id)and(mdl_role_assignments.contextid=mdl_context.id))";
$result_users = mysqli_query($_SESSION['link'],$sql_users);
$rows_count_users=mysqli_num_rows($result_users);
while($rows_count_users = mysqli_fetch_assoc($result_users)){
$sql="SELECT *
FROM mdl_course
WHERE id=".$rows_count_users['cour'];
$result = mysqli_query($_SESSION['link1'],$sql);
$rows_count=mysqli_num_rows($result);
echo'<tr>';
echo'<td>';
echo $rows_count_users['first'];
echo'</td>';
echo'<td>';
echo $rows_count_users['last'];
echo'</td>';
echo'<td>';
echo $rows_count['shortname'];
echo'</td>';
echo'</tr>';
}
?>
</table> -
3 ноября 2009 г. 15:07, спустя 2 часа 43 минуты 7 секунд
Вот он говно код для тестирования)))
Все работает. Вопрос в следующем, как сделать все одним скуль запросом, а не тремя как в моем говно коде?)
<?
$sql_users="SELECT mdl_user.id, mdl_user.firstname as first, mdl_user.lastname as last,mdl_role_assignments.contextid as cid
FROM mdl_role_assignments, mdl_user
WHERE mdl_role_assignments.userid=mdl_user.id
ORDER BY mdl_user.id";
$result_users = mysqli_query($_SESSION['link'],$sql_users);
$rows_count_users=mysqli_num_rows($result_users);
while($rows_count_users = mysqli_fetch_assoc($result_users)){
$sql1="SELECT mdl_context.instanceid as cour
FROM mdl_context
WHERE id=".$rows_count_users['cid'];
$result1 = mysqli_query($_SESSION['link'],$sql1);
$rows_count1=mysqli_fetch_assoc($result1);
$sql2="SELECT shortname
FROM mdl_course
WHERE id=".$rows_count1['cour'];
$result2 = mysqli_query($_SESSION['link'],$sql2);
$rows_count2=mysqli_fetch_assoc($result2);
echo 'Бла-бла…';
}
?> -
3 ноября 2009 г. 15:09, спустя 1 минуту 53 секунды
как сделать все одним скуль запросом, а не тремя как в моем говно коде?)
юзай JOIN
Пожалуйста, авторизуйтесь, чтобы написать комментарий!