PHP+MySQL - как правильно вывести данные

Статус
В этой теме нельзя размещать новые ответы.

Jeckerson

Постоялец
Регистрация
26 Июл 2009
Сообщения
56
Реакции
6
Итак, есть 3 таблицы:
-names - Имена учеников
id
name - Имя ученика

-discp - предметы
id
dis - предмет

-name_dis - таблица связей ученик + какие предметы
id
dis_id
name_id

Т.е. по логике у каждого ученика больше чем 1 предмет, тем самым в таблице связей поле name_id будет повторятся, например:

1 | Вася | Физика
1 | Вася | Алгебра
2 | Катя | История
3 | Петя | Физика
3 | Петя | Алгебра
3 | Петя | История

Идея такова, вывести в 1 строчку имя и предметы:
Вася : Физика, Алгебра
Катя : История
итд

знаю, что можно сделать запрос типо:
SELECT names.name, GROUP_CONCAT(discp.dis SEPARATOR ' | ' ) AS predmeti FROM names,discp WHERE names.id = name_dis.name_id AND discp.id = name_dis.dis_id GROUP BY names.id

но сделав такой запрос дальше я не могу подсоединить другие нужные мне данные по предметам, например линк на другую страницу с этим предметом ну или какие-то другие данные, т.е. как я понял нужно брать простой запрос выбрав всё где id предметов и учеников равны в таблице связки с первыми двумя таблицами, но после запроса не могу понять точно, что делать, мне подсказали что нужно делать через array_key_exists, но толком не объяснили :confused:

По-этому нуждаюсь помощи именно в сторону кода который нужно вписать после запроса или же перед
 
не старайся все запихнуть в один запрос, разбей на несколькозапросов попроще
 
можно пример для моего случая если не сложно?
PHP:
<?php
$link = mysql_connect('localhost', 'user', 'pass');
$selected_db = mysql_select_db('db_name', $link);
$result = mysql_query('SELECT * FROM name_dis');
while ($row = mysql_fetch_assoc($result)) {
	$name = mysql_fetch_assoc(mysql_query('SELECT name FROM names WHERE id = '.$row["name_id"]));
	$discp = mysql_query('SELECT * FROM discp WHERE id IN ('.$row["dis_id"].')');
    echo $row["id"]." ".$name["name"]." : "; 
    while ($co = mysql_fetch_assoc($discp)) {echo $co["dis"].", ";} 
    echo "<br>";
}
mysql_close($link);
?>
 
PHP:
<?php
$link = mysql_connect('localhost', 'user', 'pass');
$selected_db = mysql_select_db('db_name', $link);
$result = mysql_query('SELECT * FROM name_dis');
while ($row = mysql_fetch_assoc($result)) {
	$name = mysql_fetch_assoc(mysql_query('SELECT name FROM names WHERE id = '.$row["name_id"]));
	$discp = mysql_query('SELECT * FROM discp WHERE id IN ('.$row["dis_id"].')');
    echo $row["id"]." ".$name["name"]." : "; 
    while ($co = mysql_fetch_assoc($discp)) {echo $co["dis"].", ";} 
    echo "<br>";
}
mysql_close($link);
?>


Хм...всё равно выводит как я показал:

1 | Вася | Физика
1 | Вася | Алгебра
2 | Катя | История
3 | Петя | Физика
3 | Петя | Алгебра
3 | Петя | История
 
дамп базы и скрипт скинь в ЛС, помогу
 
Всё ещё нужндаюсь в помощи
 
PHP:
<?php 
$link = mysql_connect('localhost', 'user', 'pass'); 
$selected_db = mysql_select_db('db_name', $link); 
$qs='SELECT n.name,nd.name_id,nd.dis_name
FROM name_dis nd
LEFT JOIN name n ON n.name_id=nd.name_id
LEFT JOIN dis d ON d.dis_id=nd.dis_id';

$result = mysql_query($qs); 
$data=array();
while ($row = mysql_fetch_assoc($result)) { 
$data[$row['name_id']]['name']=$row['name'];
$data[$row['name_id']]['disp'][]=$row['dis_name'];
} 
mysql_close($link); 
?>


вывести можно так

PHP:
foreach($data as $name_id=>$name_data)
{
echo $name_data['name'].':';
foreach($name_data['disp'] as dis_name)
{
echo $dis_name.' ';
}
echo '<br>';
}
 
Самый простой способ чтобы такие результаты:
id| name | dis
1 | Вася | Физика
1 | Вася | Алгебра
2 | Катя | История
вывести в таком виде:
Вася : Физика Алгебра
Катя : История
PHP:
$res = mysql_query($sql);
$id = -1;
while ($el = mysql_fetch_assoc($res)) {
	if ($el['id'] != $id) {
		echo "<br />".$el['name'].": ";
		$id = $el['id'];
	}
	echo $el['dis']." ";
}
В варианте от Mongolor - запросы в цикле - жесть.
В варианте от babon - 2 раза циклом по одним и тем же результатам - ни к чему.
 
Самый простой способ чтобы такие результаты:
id| name | dis
1 | Вася | Физика
1 | Вася | Алгебра
2 | Катя | История
вывести в таком виде:
Вася : Физика Алгебра
Катя : История
PHP:
$res = mysql_query($sql);
$id = -1;
while ($el = mysql_fetch_assoc($res)) {
	if ($el['id'] != $id) {
		echo "<br />".$el['name'].": ";
		$id = $el['id'];
	}
	echo $el['dis']." ";
}
В варианте от Mongolor - запросы в цикле - жесть.
В варианте от babon - 2 раза циклом по одним и тем же результатам - ни к чему.

а какой именно запрос тогда?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху