За последние 24 часа нас посетили 17648 программистов и 1628 роботов. Сейчас ищут 1670 программистов ...

Выборка из базы по нескольким параметрам

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

  1. Den1s

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

    С нами с:
    10 авг 2008
    Сообщения:
    19
    Симпатии:
    0
    Адрес:
    Siberia
    Взялся написать небольшой движек форума на PHP + MySQL. Примерно как это должно выглядеть представляю но первое с чем пришлось столкнуться, это как логичнее составить таблицу. Изначально задумал так: 1я таблица (forum_index), содержит заголовки форумов, запросы вида /view.php?forumid=1 и тд. Вторую таблицу (forum_thread), в которой заголовки тем и посты, запрос к теме вида /view.php?forumid=1&threadid=1 , при таком запросе подключается к базе, и из таблицы forum_thread, по переданным параметрам forumid и threadid сортирует и выводит посты. При отсутствии в запросе threadid, сортирует по параметру forumid и выводит заголовки тем форума. Проблема возникла при написании функции добавления новой темы, с добавление к заголовку идентификатора, по которому бы потом можно было сортировать посты принадлежащие к определенной теме. threadid при создании новой темы, назначается по принципу: подключается к таблице, узнает количество заголовков
    Код (Text):
    1. count($row[threadid])
    , и прибавляет к результату единицу (возможно это нелогично, но так можно обеспечить не повторяющиеся id.) При добавлении поста к теме, threadid этой темы будет сущевствовать, и при отправке поста передаваться- эти обеспечиваю принадлежность постов к определенной теме. Но в процессе наполнеия форума, получится так, что в таблице будет много постов с одинаковым threadid, получается что на странице отображения списка тем, где идет сортировка по forumid, будут выведены все заголовки, даже с одинаковым threadid.

    Вопрос- как можно сделать выборку из таблицы так, чтобы был выведен только первый заголовок с threadid, или же логичнее под заголовки тем, вести отдельную таблицу?
     
  2. Den1s

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

    С нами с:
    10 авг 2008
    Сообщения:
    19
    Симпатии:
    0
    Адрес:
    Siberia
    И еще)) Может кто подскажет, как мне вычислять уникальный id для тем форумов, ведь в постах определенной темы id должен быть один.

    вот скрипт добавления, возможно в нем есть грубые нарушения, я только только начал интересоваться ПХП.

    Код (Text):
    1. /*----------------------------------------------------------------------------*/
    2.  
    3. $db = mysql_connect("localhost","admin","pass");
    4.  
    5. mysql_select_db("my_site", $db);
    6.  
    7. /*----------------------------------------------------------------------------*/
    8.  
    9.  
    10.     if (empty($thread_title)){
    11.  
    12.         echo "введите сообщение";
    13.  
    14.         }
    15.  
    16.         else {
    17.  
    18.             $row = mysql_query ("SELECT * FROM forum_thread", $db);
    19.  
    20.             $arrow = mysql_fetch_array($row);
    21.             $thread = count($arrow[threadid]);
    22.  
    23.             $threadid = $forumid.$thread;
    24.  
    25.             if (empty($username)){
    26.                 $username = "Гость";
    27.                 }
    28.  
    29.             $write = mysql_query ("INSERT INTO forum_thread (title,forumid,threadid,text,username)
    30.             VALUES ('$thread_title','$forumid','$threadid','$thread_msg','$username')", $db);
    31.  
    32.             if ($write == true) {
    33.  
    34.                 echo "все отлично";
    35.  
    36.                 } else {
    37.  
    38.                     echo "ошибка";
    39.  
    40.                     }
    41.  
    42.             };
    [/code]
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Дофига букав. Хотите, чтобы быстрее ответили - напишите структуру базы и результат, который хотите видеть на выходе. Очень часто получается, что человек хочет одно, а описание совершенно другое. Или вообще не может ничего объяснить. Поэтому нагляднее пишите.

    По поводу второго. Есть такая вещь, как AUTO_INCREMENT и PRIMARY KEY. В сочетании - основа всего на свете. Вы вставляете запись и ей автоматически присваивается новый id, который никому более не сможет принадлежать. И тогда отпадает необходимость выбирать максимальный id.

    P.S. Второе я чего-то не пойму, что там вообще.. ))
     
  4. Den1s

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

    С нами с:
    10 авг 2008
    Сообщения:
    19
    Симпатии:
    0
    Адрес:
    Siberia
    Таблица, в которую должен вносить данные из формы с полями thread_title и thread_msg вышеуказанный скрипт имеет вид:

    | id | title | forumid | threadid | text | last_update | username |

    поле id - auto_increment, title и username - varchar, forumid и threadid - int, last_update - datetime.

    на выходе, запрос в котором отсутствует параметр threadid, должен отобразить страницы с заголовками тем, в противном случает, подключается к таблице, сортирует по forumid и threadid и выводит посты по данной теме.
     
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3. if (isset($_GET["threadid"])) {
    4.  
    5.    //Выводим тему
    6. }
    7. else {
    8.    $query = 'SELECT DISTINCT `title` FROM `forum_thread`';
    9.    /итд
    10. }
    11. ?>