выборка из 3 таблиц

IgorCH

Новичок
выборка из 3 таблиц

Есть 3 таблицы.
1 таблица
Id_a name_a

2 таблица
Id_b name_b

3 таблица
Id name_1 name_2 name_3 name_4

В таблице 3 одни цифры (id из первых двух), т.е.:
Id name_1 name_2 name_3 name_4
0 0 1 2 5
1 3 3 0 0
2 5 2 2 0
3 0 7 1 5
4 1 0 0 5

Как мне сделать выборку из таблицы 3, чтоб вместо цифр вставлялись name_a и name_b???
name_1 это id_a из таблицы 1
name_2 это id_b из таблицы 2
name_3 это id_a из таблицы 1
name_4 это id_b из таблицы 2
 

IgorCH

Новичок
к двум ячейкам получается, а вот к 4 нет

$sql = "SELECT id_a, name_a, id_b, name_b, name_1, name_2, name_3, name_4
FROM таблица 1
LEFT JOIN таблица 2 ON таблица_1.name_1 = таблица_2.id_a
LEFT JOIN таблица 3 ON таблица_1.name_2 = таблица_3.id_b";
потом вывожу
$result = mysql_query($sql,$con) or die (mysql_error()."<br>".$sql);
while ($row = @ mysql_fetch_array($result)) {
print $row['name_1'];
print $row['name_2']
}

А вот как еще и name_3 и name_4 подсоединить, не получается.
 

akd

dive now, work later
Команда форума
LEFT JOIN tbl AS T1 ...
LEFT JOIN tbl AS T2 ...

но зачем тебе это?
или пример был высосан из пальца и реальные данные отличаются от
name_1 это id_a из таблицы 1
name_2 это id_b из таблицы 2
name_3 это id_a из таблицы 1
name_4 это id_b из таблицы 2
 

IgorCH

Новичок
не совсем понял.
Ну вот реальный код (просто названия ячеек сложные):
$sql = "SELECT id_Rpred, name_Rpred, id_Rprep, name_Rprep, predmet, prepod, predmet_kr, prepod_kr
FROM raspis
LEFT JOIN raspis_predmet ON raspis.predmet = raspis_predmet.id_Rpred
LEFT JOIN raspis_predmet ON raspis.predmet_kr = raspis_predmet.id_Rpred
LEFT JOIN raspis_prepod ON raspis.prepod = raspis_prepod.id_Rprep
LEFT JOIN raspis_prepod ON raspis.prepod_kr = raspis_prepod.id_Rprep
WHERE gruppa=1 AND kurs=1 ORDER by id_R DESC";

при этом ошибка Column 'id_Rpred' in field list is ambiguous
 

Paralit

Новичок
ты понимаешь, в чем заключается ошибка? зачем два раза джойнить одну и ту же таблицу?
 

Wicked

Новичок
1) указывать алиасы для таблиц: "raspis_predmet AS ..." и т.д.
2) указывать имена таблиц (алиасов) во всех обращениях к полям: и в списке полей для выборки, и в where, и в order by.
 

IgorCH

Новичок
для двух я понимаю как сделать
$sql = "SELECT t2.id_Rpred, t2.name_Rpred, t3.id_Rprep, t3.name_Rprep, predmet, prepod, predmet_kr, prepod_kr
FROM raspis
LEFT JOIN raspis_predmet as t2 ON raspis.predmet = t2.id_Rpred
LEFT JOIN raspis_prepod as t3 ON raspis.prepod = t3.id_Rprep
WHERE gruppa=1 AND kurs=1 ORDER by id_R DESC";

а вот как сюда добавить еще
raspis.predmet_kr = t2.id_Rpred
raspis.prepod_kr = t3.id_Rprep
 

Wicked

Новичок
хотелось бы узнать, какой смысл у всех этих таблиц, полей, и что ты хочешь с ними сделать. Иначе сложно что-либо с уверенностью сказать.
 

IgorCH

Новичок
в таблице raspis одни цифры
каждая цифра соответствут названию (name_Rpred и name_Rprep) из других таблиц, т.е.:
predmet соответствует id_Rpred -> name_Rpred
predmet_kr соответствует id_Rpred -> name_Rpred
prepod соответствует id_Rprep -> name_Rprep
prepod_kr соответствует id_Rprep -> name_Rprep

Мне надо вывести не цифры, а названия (имена), т.е.:
получиться 4 названия (имени)
predmet
prepod
predmet_kr
prepod_kr
 

IgorCH

Новичок
просто название ячейки
raspis это таблица расписания занятий, она уже занесена
Предмет Преподаватель
Предмет по кр. недели Преподаватель по кр. недели

Мне нужно вывести сразу все 4 значения

-~{}~ 12.09.06 15:07:

вывести надо что то типо:
<table><tr>
<td>Предмет / Преподаватель </td>
<td>Предмет по красной недели/ Преподаватель по красной недели</td>
</tr></table>
 

IgorCH

Новичок
может значения из таблиц загнать в двухмерный массив?
например,
name[id_Rpred][name_Rpred]
name_1[id_Rprep][name_Rprep]

-~{}~ 12.09.06 15:11:

не я закончил учиться, причем не на программиста, близко с программированием ни что не лежало :))
просто помагаю
 

Wicked

Новичок
ну ладно, кое-как удалось понять :)

вообщем, запрос будет выглядеть примерно так:

$sql = "SELECT r_predmet.name_Rpred, r_predmet_kr.name_Rpred, r_prepod.name_Rprep, r_prepod_kr.name_Rprep
FROM raspis
LEFT JOIN raspis_predmet AS r_predmet ON raspis.predmet = r_predmet.id_Rpred
LEFT JOIN raspis_predmet AS r_predmet_kr ON raspis.predmet_kr = r_predmet_kr.id_Rpred
LEFT JOIN raspis_prepod AS r_prepod ON raspis.prepod = r_prepod.id_Rprep
LEFT JOIN raspis_prepod AS r_prepod_kr ON raspis.prepod_kr = r_prepod_kr.id_Rprep
WHERE raspis.gruppa=1 AND raspis.kurs=1 ORDER by raspis.id_R DESC";

-~{}~ 12.09.06 18:14:

не я закончил учиться, причем не на программиста, близко с программированием ни что не лежало )
просто помагаю
про контрольную недею - это была догадка, что значит "кр."
 

IgorCH

Новичок
не есть две недели синия и красная, расписание может немного различаться

-~{}~ 12.09.06 15:22:

а как при таком сделать вывод значений?
до этого я делал так
$name_Rpred = $row['name_Rpred'];
$name_Rprep = $row['name_Rprep'];

а теперь для 4 как?

-~{}~ 12.09.06 15:28:

ВСЕ БОЛЬШОЕ СПАСИБО!!!!
разобрался
$name_Rpred = $row['0'];
$name_Rprep = $row['2'];

$name_Rpred_kr = $row['1'];
$name_Rprep_kr = $row['3'];
 

Wicked

Новичок
1) назначить алиасы выбираемым полям:
SELECT r_predmet.name_Rpred AS name_Rpred, r_predmet_kr.name_Rpred AS name_Rpred_kr, r_prepod.name_Rprep AS name_Rprep, r_prepod_kr.name_Rprep as name_Rprep_kr

или

2) использовать нумерованный $row:
[m]mysql_fetch_row[/m]
 
Сверху