За последние 24 часа нас посетили 30506 программистов и 1809 роботов. Сейчас ищут 847 программистов ...

Работа с двумя таблицами

Тема в разделе "PHP и базы данных", создана пользователем aziz, 23 мар 2009.

  1. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    Всем доброго времени суток.
    Проблема такова имеются две таблицы:
    В одной только имя разделов

    [sql]CREATE TABLE `glob` (
    `glob_id` int(255) NOT NULL auto_increment,
    `globtitle` varchar(255) NOT NULL,
    PRIMARY KEY (`glob_id`),
    KEY `globtitle` (`globtitle`)
    ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;[/sql]

    во второй уже сами тексты с названиями
    [sql]CREATE TABLE `news` (
    `newsid` int(255) NOT NULL auto_increment,
    `titlenews` text,
    `contentnews` text,
    `glob_id` int(255) default NULL,
    `date` varchar(30) NOT NULL,
    PRIMARY KEY (`newsid`),
    KEY `glob_id` (`glob_id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=12 ;[/sql]
    как видите ключь [sql]`glob_id`[/sql] сушествует в обоях таблицах и для статей они установлены по категориям к примеру Ручки [sql] KEY `glob_id`=1[/sql] и книги [sql] KEY `glob_id`=2[/sql], в таблице глоб сушествует раздел [sql]`globtitle`[/sql] к примеру РУЧКИ, ЛИТЕРАТУРА. Теперь я делаю запрос
    PHP:
    1. <?  
    2.  $Q= 'SELECT * FROM glob, news WHERE glob.glob_id=news.glob_id' ;
    3.  $result = mysql_query($Q);
    4.  
    5. while ($row = mysql_fetch_assoc($result))
    6.  
    7.  {
    8.  echo $row['globtitle'];
    9.   echo $row['titlenews'];
    10.   echo"<a href=?news=".$row['glob_id'].">подробнее</a>";
    11.   echo"<br>"; echo"<br>";
    12.  
    13.  }
    14.  
    15.  
    16.  ?>
    17.  
    всё работает правильно и отображается в своей категории(раздел) НО мне надо сделать что бы имя категории(раздела) отображалась лишь раз а не напротив каждой ссылки , как сделать что то не додумаюсь, помогите пожалуйста....
    С Уважением Aziz
     
  2. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    Тоесть нужно вывести данные таким типом:

    Код (Text):
    1. |  РУЧКИ  |  КНИГИ   |
    2. -------------------------
    3. | ручка 1 |  книга 1 |
    4. -------------------------
    5. | ручка 2 |  книга 2 |
    и так далие...
     
  3. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    Всё, сделал. Вопрос снят вот если кому интересно
    PHP:
    1.   <?
    2.        
    3.  
    4.  
    5.  
    6.  
    7.  $result = mysql_query('SELECT * FROM glob WHERE glob_id ');
    8.  
    9.  
    10. while ($row = mysql_fetch_assoc($result))
    11.  
    12.  { // *1*
    13. $a=$row['glob_id'];
    14. echo $row['globtitle'];
    15. echo "<br/>";
    16. $result1 = mysql_query('SELECT * FROM news WHERE glob_id='.$a);
    17. while ($row1 = mysql_fetch_assoc($result1))
    18.  
    19.  
    20.  { //*2*
    21. echo $row1['titlenews'];
    22. echo "<br/>";
    23.  
    24. } //*2*
    25. }//*1*
    26.  
    27.  
    28.  ?>
     
  4. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    плохо. никогда никому не показывай.
     
  5. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    а что делать если никто не хочет делится? тут он в укароченной версии
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    посчитай, сколько у тебя всего будет запросов к базе
     
  7. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    а есть варианты, буду весьма благодаре за совет
     
  8. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    есть. но ты все-таки напиши, сколько будет запросов к базе.
     
  9. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    у меня плучилось 9
     
  10. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    и это зависит от объемов выборки.

    варианты есть разные. примеры:

    PHP:
    1. $i=0;
    2. while ($row=...
    3. {
    4. if (!$i) echo $title;
    5. $i++;
    6.  
    7. }
    PHP:
    1. $sql = "select * from glob...
    2.  
    3. echo ..
    4.  
    5. $sql = "select * from news..
    и т.п.
     
  11. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    Но хотелось бы всё таки с этим варианом разобратся
    PHP:
    1. $Q= 'SELECT * FROM glob, news WHERE glob.glob_id=news.glob_id' ;
    вожможно ли получить в это стиле, или всётаки разбивать запрос
     
  12. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    первый пример о чем говорит? хотелось чтобы разжевали и в рот положили? $$
     
  13. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    что б разжевали и врот положили, спасибо не надо, но чуть чуть помогли за это спасибо скажем, mysql только учу вот и парюсь, без обид :))....
     
  14. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    PHP:
    1. <?
    2. $globs = array(); // отображённые заголовки
    3. while ($row = mysql_fetch_assoc($result)){
    4.     if (!isset($globs[$row['globtitle']])){ // проверяем, показывали ли мы заголовок
    5.         echo $row['globtitle'];
    6.         $globs[$row['globtitle']] = true; // всё, мы показали определённый заголовок, запоминаем это
    7.     }
    8.  
    9.   echo $row['titlenews'];  
    10.   echo"<a href=?news=".$row['glob_id'].">подробнее</a>";
    11.   echo"<br>"; echo"<br>";
    12.  
    13. }
    Так?
     
  15. aziz

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

    С нами с:
    1 фев 2006
    Сообщения:
    194
    Симпатии:
    0
    Адрес:
    Ташкент
    lexa Большое Вам СПАСИБО, это именно то что я пытался сделать, гляжу придётся мне всё о массивах по новой читать, и дальше учить MySQL. Просто учусь методом научного тыка, книжка одна но не всё понятно сразу. Вот и пользуюсь этим форумом так как тут всегда можно найти помошь, ещё раз благодарю,
    с Уважением Aziz
     
  16. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    lexa
    Ну кто так в наше то время пишет запрос? JOIN надо использовать и явно, так намного понятнее потом смотреть сложные запросы, где куча таблиц собирается. Темболее что оптимизатор всёравно приводит это всё к JOIN, вы ему тока дополнительную работу даёте.
    PHP:
    1. <?php
    2. $Q= 'SELECT *
    3.     FROM glob AS g
    4.     LEFT JOIN news AS n ON n.glob_id = g.glob_id';
    5.  
     
  17. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Psih, нене, я нене. Я только про массив. :)

    P.S. А джойню именно так, действительно удобнее. Правда условие для on в скобочки пихаю, так ещё проще глазякам разобрать и прочитать запрос.