За последние 24 часа нас посетили 17827 программистов и 1656 роботов. Сейчас ищут 1188 программистов ...

Помогите построить таблицу

Тема в разделе "PHP и базы данных", создана пользователем Flip, 14 мар 2008.

  1. Flip

    Flip Активный пользователь

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    Есть две таблицы, пример:
    1) Таблица1
    +--------------------------+
    | ID | Категория |
    +--------------------------+
    | 1 | Категория 1 |
    | 2 | Категория 2 |
    | 3 | Категория 3 |

    2) Таблица2
    +---------------------------+
    | ID | IDcat | Товар |
    +---------------------------+
    | 1 | 3 | Товар 1 |
    | 2 | 2 | Товар 2 |
    | 3 | 3 | Товар 3 |
    | 4 | 1 | Товар 1 |
    | 5 | 1 | Товар 2 |
    | 6 | 3 | Товар 5 |

    Мне необходимо построить таблицу, содержащую всего один столбец так, чтобы заголовком являлась Категория, а содержимым - Товар. Выбор осуществлялся бы по ID категории.
    Т.е. [sql]$query = "select * from Таблица 1 t1 , Таблица 2 t2 where t1.ID = t2.IDcat and t1.ID=3 order by Товар"[/sql]

    и должно получиться так:
    +-------------------+
    | Категория 3 |
    +-------------------+
    | Товар 1 |
    | Товар 3 |
    | Товар 5 |

    но у меня не получается, т.е. таблица строится, но теряется одна запись, самая первая, в данном примере, в моем случае, было бы две записи, начиная со второй (Товар 3). Помогите разобраться )
     
  2. Flip

    Flip Активный пользователь

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    Совсем забыл...

    [sql] <?php
    // Устанавливаем соединение с базой данных
    include "../include/config.php";

    // Создаем таблицу
    echo "<table border=0>";

    // Делаем запрос
    $r=mysql_query("select * from Таблица 1 t1, Таблица 2 t2 where t1.ID = t2.IDcat and t1.ID=5 order by t2.Товар");
    if($r)
    {
    $f = mysql_fetch_array($r);
    echo "<tr>";
    echo "<th><b><u>&nbsp;$f[Категория]</u></b></th>";
    echo "</tr>";

    while($n = mysql_fetch_array($r))
    {
    echo "<tr>";
    echo "<td>$n[Товар]</td>";
    echo "</tr>";
    }
    }
    echo "</table>";
    ?>[/sql]
     
  3. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Ты два раза делаешь mysql_fetch_array - вот у тебя и теряется первая запись.
    Переделай так:
    PHP:
    1. <?
    2.            if($r)
    3.            {
    4.                $f = mysql_fetch_array($r);
    5.                echo "<tr>";
    6.                echo "<th><b><u>&nbsp;$f[Категория]</u></b></th>";
    7.                echo "</tr>";
    8.  
    9.              do {
    10.                echo "<tr>";
    11.                echo "<td>$n[Товар]</td>";
    12.                echo "</tr>";
    13.              } while($n = mysql_fetch_array($r))
    14.            }
    15.            echo "</table>";
    16. ?>
     
  4. Flip

    Flip Активный пользователь

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    Переделал, только вместо первой записи - пустая строка ))
     
  5. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Вместо кода RomanBush'a можешь просто в своём коде на 16-ой строке поставить:
    PHP:
     
  6. Flip

    Flip Активный пользователь

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    да, функция mysql_data_seek прокатила, но RomanBush говорит, что я в своем коде делаю дважды mysql_fetch_array, что, по-видимому, не есть хорошо....но зато работает теперь ))
    спасибо RomanBush, спасибо Johnatan! =)
     
  7. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Почитай лучше мануал по mysql_fetch_array и mysql_data_seek, иначе ты даже не поймёшь, в чём ошибка и в следующий раз сделаешь то же самое. Возможно после прочтения мануала, ты даже оптимизируешь свой код и у тебя не будет двух mysql_fetch_array. :)
     
  8. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    +1
     
  9. Flip

    Flip Активный пользователь

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    ушел читать мануал :)