1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

SQL запрос

Тема в разделе "Web Coding", создана пользователем Arzu, 11 фев 2007.

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

    Arzu Прохожие

    Есть две таблицы, в одной описание книги, в другой отдельно ее страницы, связка по id книги (один ко многим, получается), надо это все объединить в третью таблицу, причем содержание всех страниц в правильном порядке занести в одно поле будущей таблицы. В каком порядке делать выборку, и вообще оптимальный алгоритм пока не представляю, если есть мнения поделитесь пожалуста.
     
  2. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Выложил бы хоть структуру таблиц.

    Легко можно сделать PHP скриптиком.

    только вот насчет оптимального это не относится =)
     
  3. Arzu

    Arzu Прохожие

    Знаний пхп у меня на уровне юзания мануала, поэтому буду благодарен если укажете примерный алгоритм и функции. Далее, про таблицы.
    Таблица articles это таблица книг, ArticleID id книги, в таблице articlepages (таблица страниц) этот ArticleID определяет к какой книге относится страница. И надо собрать данные из этих дву таблиц в третью post, в таком соответствии:
    post.title = articles.Title
    post.short_story = articles.Summary
    post.full_story = articlepages.Title + articlepages.Content (только всех страниц что относятся к этой книге)
    Вот сокращенная структура таблиц.
    PHP:
    CREATE TABLE `articles` (
      `
    ArticleIDint(11NOT NULL auto_increment,
      `
    Titlevarchar(255NOT NULL default '',
      `
    Summarylongtext,
    ...
    CREATE TABLE `articlepages` (
      `
    PageIDint(11NOT NULL auto_increment,
      `
    ArticleIDint(11) default '0',
      `
    Titlevarchar(255NOT NULL default '',
      `
    Contenttext,
    ...
    CREATE TABLE `post` (
      `
    short_storytext NOT NULL,
      `
    full_storymediumtext NOT NULL,
      `
    titlevarchar(255NOT NULL default '',
    ...
     
  4. prezer

    prezer Создатель

    Регистр.:
    2 фев 2007
    Сообщения:
    45
    Симпатии:
    6
    я предлагаю так сделать
    1. сначало все данные берем из первой таблицы
    SELECT * FROM `articles` заносим в массив или в файл если памяти мало.
    2. затем делаем запросы в цикле из второй таблицы пока не кончится ArticleID из первого массива т.е.
    цикл while(isset(${МАС.ЗНАЧ.ArticleID из предыдущего запроса}[$i]))
    запрос
    SELECT * FROM `articlepages` WHERE ArticleID=${МАССИВ ЗНАЧЕНИЙ ArticleID из предыдущего запроса}[$i]
    и тут же в цикле сразу добавляем нужное нам в новую таблицу
    $i++;

    как вариант имеет место на жизнь.
     
  5. Arzu

    Arzu Прохожие

    вот рабочий вариант кода, но боюсь тут надо запросы пересмотреть, ибо книг в старой базе всего 144 а он в новой создает 186. плюс страницы с хтмл кодом, он с ним не аккуратно работает некоторые теряет, надо что-то с функцией объединения делать: $full .= $page['pTitle'].$page['Content']."{PAGEBREAK}";
    PHP:
    <?php 
        
    //устанавливаем соединение 
       
    $conn mysql_connect("localhost""root""");
          if (!
    $conn) {
           echo 
    "Unable to connect to localhost: " mysql_error();
           exit;
       }
       
       if (!
    mysql_select_db("dosh")) {
           echo 
    "Unable to select dosh: " mysql_error();
           exit;
       }
           
    //выбираем все книги 
           // Цикл обработки каждой книги, пока есть ArticleID 
       
    $articles mysql_query('SELECT l_articles.ArticleID as aArticleID, l_articles.Title as aTitle FROM l_articles ORDER BY l_articles.ArticleID');
       while (
    $article mysql_fetch_assoc($articles)) { 
       
    $aid $article['aArticleID'];
          
    // содержимое всех страниц в одну переменную текста 
        
    $full ='';
        
    $pages mysql_query('SELECT l_articlepages.ArticleID as pArticleID, l_articlepages.Title as pTitle, Content, PageID FROM l_articlepages WHERE l_articlepages.ArticleID = '.$aid.' ORDER BY PageID');
        while (
    $page mysql_fetch_assoc($pages)){ 
        
    $full .= $page['pTitle'].$page['Content']."{PAGEBREAK}"
        } 
       
    mysql_free_result($pages);
        
    //создаем переменные для добавленияв третью таблицу 
       
    $title $article['aTitle']; 
       
    // запрос на добавление данных 
       
    mysql_query("INSERT INTO post (full_story, title) 
        VALUES('
    $full', '$title')"); 
        }
       
    mysql_free_result($articles);
    ?>
     
  6. Arzu

    Arzu Прохожие

    люди, не проходите мимо. зацените код, поможьте страждущим.
     
Статус темы:
Закрыта.