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

Тема в разделе "PHP", создана пользователем Jeckerson, 10 дек 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Jeckerson

    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:

    По-этому нуждаюсь помощи именно в сторону кода который нужно вписать после запроса или же перед
     
  2. Mongolor

    Mongolor

    Регистр.:
    5 дек 2007
    Сообщения:
    157
    Симпатии:
    29
    не старайся все запихнуть в один запрос, разбей на несколькозапросов попроще
     
  3. Jeckerson

    Jeckerson Постоялец

    Регистр.:
    26 июл 2009
    Сообщения:
    56
    Симпатии:
    6

    можно пример для моего случая если не сложно?
     
  4. Mongolor

    Mongolor

    Регистр.:
    5 дек 2007
    Сообщения:
    157
    Симпатии:
    29
    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);
    ?>
     
  5. Jeckerson

    Jeckerson Постоялец

    Регистр.:
    26 июл 2009
    Сообщения:
    56
    Симпатии:
    6

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

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

    Mongolor

    Регистр.:
    5 дек 2007
    Сообщения:
    157
    Симпатии:
    29
    дамп базы и скрипт скинь в ЛС, помогу
     
  7. Jeckerson

    Jeckerson Постоялец

    Регистр.:
    26 июл 2009
    Сообщения:
    56
    Симпатии:
    6
    Всё ещё нужндаюсь в помощи
     
  8. babon

    babon Создатель

    Регистр.:
    24 авг 2008
    Сообщения:
    25
    Симпатии:
    0
    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>';
    }
     
  9. lucky_priest

    lucky_priest Создатель

    Регистр.:
    16 ноя 2009
    Сообщения:
    20
    Симпатии:
    7
    Самый простой способ чтобы такие результаты:
    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 раза циклом по одним и тем же результатам - ни к чему.
     
  10. Jeckerson

    Jeckerson Постоялец

    Регистр.:
    26 июл 2009
    Сообщения:
    56
    Симпатии:
    6
    а какой именно запрос тогда?
     
Статус темы:
Закрыта.