За последние 24 часа нас посетили 54469 программистов и 1779 роботов. Сейчас ищут 925 программистов ...

Категории доски объявлений

Тема в разделе "PHP для новичков", создана пользователем ng0d, 12 фев 2009.

  1. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Сделал таблицу с полями id, cat, ru, en, count

    где:

    id - идентификатор (атоматический)
    cat - номер в какую категорию входит, скажем если номер 1, то является подкатегорией категории под номером 1
    ru - название на русском
    en - название на английском
    count - количество объявлений в категории

    Теперь вопрос, как вывести 4 столбика по 3 линии, то-есть 12 всего блоков так, чтобы в самом верху блока шла категория скажем под $id="1" и ниже под ней шли бы все категории с $cat="1", далее блок с $id="2" и т.д. ?
     
  2. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Сделать доску без подкатегорий проблем нету, а вот с ими, я не могу продумать толком, чтобы было правильно, может кто подскажет.
     
  3. kuliev

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

    С нами с:
    10 фев 2006
    Сообщения:
    204
    Симпатии:
    0
    Адрес:
    TLT
    ng0d
    Сделай отдельные таблицы категория, объявления и т.д. и связывай их между собой. Ничего сложного!
     
  4. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Наверно не так задал вопрос. :)

    Мне надо вывести 12 блоков, обратившись один раз к базе, если так можно. 4 столбика по 3 строки.

    Вот пытаюсь вывести 2 столбика, но второй не выводится, потому что наверно надо дважды обращаться к базе.

    PHP:
    1. <?
    2.  
    3.  
    4. /* Обращение к базе */
    5. $db_table = mysql_query("SELECT * FROM category",$db);
    6.  
    7.  
    8.  
    9.  
    10. print"<table border='1' width='400'><tr>";
    11.  
    12.  
    13. /* Вывод 1 категории */
    14. print "<td>";
    15. while ($category = mysql_fetch_array($db_table))
    16. {
    17. $cat = $category["cat"];
    18. $ru = $category["ru"];
    19. if ($cat == "1")
    20. {
    21. print "$ru<br>";
    22. }
    23. }
    24. print "</td>";
    25.  
    26.  
    27.  
    28.  
    29. /* Вывод 2 категории */
    30. print "<td>";
    31. while ($category = mysql_fetch_array($db_table))
    32. {
    33. $cat = $category["cat"];
    34. $ru = $category["ru"];
    35. if ($cat == "2")
    36. {
    37. print "$ru<br>";
    38. }
    39. }
    40. print "</td>";
    41.  
    42.  
    43.  
    44. print "</tr></table>";
     
  5. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    А как сделать чтобы был один запрос в базу?
     
  6. kuliev

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

    С нами с:
    10 фев 2006
    Сообщения:
    204
    Симпатии:
    0
    Адрес:
    TLT
    ng0d

    PHP:
    1.  
    2. <?
    3. $db_table = mysql_query("SELECT * FROM category",$db);
    4. ?>
    5.  
    Вот в этом запросе ты выводишь ВСЕ что есть у тебя в БД, используй условия WHERE, GROUP BY, и т.д.
     
  7. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Вы наверно не понимаете вопроса. Я могу вывести любое поле, тиблицу, неважно что именно. Мне надо сделать вывод в 4 столбика по 3 строки. Я могу вывести 12 блоков вниз, но как сделать чтобы сначало 4 выводилось по горизонтали, потом ниже ещё 4 и ниже ещё 4. Как выглядит на главной странице сайта doska.ru.
     
  8. kuliev

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

    С нами с:
    10 фев 2006
    Сообщения:
    204
    Симпатии:
    0
    Адрес:
    TLT
    Если я Вас правильно понял, то Вам нужно нечто такое:


    PHP:
    1.  
    2. <?
    3. echo "<table width=600  border=0  cellspacing='1' cellpadding='4' align='center'>";
    4.  
    5. while ($row = mysql_fetch_array($result)){
    6. echo "<tr>";
    7. echo "<td align=center valign=top>'".$row[0]."'></td>";
    8. echo "<td align=center valign=top>'".$row[1]."'</td>";
    9. echo "<td align=center valign=top>'".$row[2]."'</td>";
    10. echo "<td align=center valign=top>'".$row[3]."'</td>";
    11. }
    12. echo "</tr>";
    13. echo "</table>";
    14. ?>
    15.  
     
  9. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Кажется, ему нужно что-то вроде

    PHP:
    1. <?
    2. $txt= "<table><tr>";
    3. $k=0;
    4.  while ($row = mysql_fetch_array($result)){
    5.  
    6. $txt.="<td>".$row['ru']."</td>";
    7. if (++$a%4==0){$txt.="</tr><tr>"}
    8. }
    9. $txt.= "</tr></table>";
    10. echo $txt;
     
  10. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Спасибо за ваши варианты, но мне нужен так-же вывод подкатегорий. Вот мой вариант, но тут 12 запросов в базу, можно ли сделать с одним запросом такое или нет?

    PHP:
    1. <?php
    2. print "<table border='1' width='800px'>";
    3.  
    4. $cat_num = "0";
    5.  
    6. for ($vertical=1; $vertical<=3; $vertical++){
    7. print "<tr><td>";
    8.  
    9. for ($horizontal=1; $horizontal<=4; $horizontal++){
    10.  
    11. $db_table = mysql_query("SELECT * FROM category WHERE cat=$cat_num",$db);
    12. $cat_num++;
    13. while ($cat = mysql_fetch_array($db_table)){
    14. print $cat['ru']."<br>";
    15. }
    16. /* Столбик */
    17. print "</td><td>";
    18. }
    19. /* Ряд */
    20. print "</td></tr>";
    21. }
    22.  
    23. print "</table>";
    24. ?>
    25.  
     
  11. ng0d

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

    С нами с:
    7 фев 2009
    Сообщения:
    100
    Симпатии:
    0
    Адрес:
    Латвия
    Или 12 - 20 запросов для одной страницы, это будет нормально. Или всё-же много?
     
  12. vaspet

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

    С нами с:
    23 фев 2009
    Сообщения:
    27
    Симпатии:
    0
    [sql]SELECT * FROM category AS c1 LEFT JOIN category AS c2 ON c1.id=c2.cat WHERE c1.id=$cat_num[/sql]

    получиш' все подкатегории категории $cat_num + саму категориЙУ одним запросом. или убери WHERE и будет тебе все категории с подкатегориями
     
  13. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    1. Убивец!
    2. Вытягивай их все одним запросом в массив а потом его уже циклом кидай в print
    3. зачем здесь таблица, если можно кидать каждую в <div style="float: left">print </div> и они по контейнеру сами расползутся в столько строк сколько надо, сколько бы категорий у тебя ни было?