SQL запрос

Статус
В этой теме нельзя размещать новые ответы.
A

Arzu

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

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

только вот насчет оптимального это не относится =)
 
Выложил бы хоть структуру таблиц.
Легко можно сделать PHP скриптиком.
Знаний пхп у меня на уровне юзания мануала, поэтому буду благодарен если укажете примерный алгоритм и функции. Далее, про таблицы.
Таблица 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` (
  `ArticleID` int(11) NOT NULL auto_increment,
  `Title` varchar(255) NOT NULL default '',
  `Summary` longtext,
...
CREATE TABLE `articlepages` (
  `PageID` int(11) NOT NULL auto_increment,
  `ArticleID` int(11) default '0',
  `Title` varchar(255) NOT NULL default '',
  `Content` text,
...
CREATE TABLE `post` (
  `short_story` text NOT NULL,
  `full_story` mediumtext NOT NULL,
  `title` varchar(255) NOT NULL default '',
...
 
я предлагаю так сделать
1. сначало все данные берем из первой таблицы
SELECT * FROM `articles` заносим в массив или в файл если памяти мало.
2. затем делаем запросы в цикле из второй таблицы пока не кончится ArticleID из первого массива т.е.
цикл while(isset(${МАС.ЗНАЧ.ArticleID из предыдущего запроса}[$i]))
запрос
SELECT * FROM `articlepages` WHERE ArticleID=${МАССИВ ЗНАЧЕНИЙ ArticleID из предыдущего запроса}[$i]
и тут же в цикле сразу добавляем нужное нам в новую таблицу
$i++;

как вариант имеет место на жизнь.
 
я предлагаю так сделать
1. сначало все данные берем из первой таблицы
SELECT * FROM `articles` заносим в массив или в файл если памяти мало.
2. затем делаем запросы в цикле из второй таблицы пока не кончится ArticleID из первого массива т.е.
цикл while(isset(${МАС.ЗНАЧ.ArticleID из предыдущего запроса}[$i]))
запрос
SELECT * FROM `articlepages` WHERE ArticleID=${МАССИВ ЗНАЧЕНИЙ ArticleID из предыдущего запроса}[$i]
и тут же в цикле сразу добавляем нужное нам в новую таблицу
$i++;
как вариант имеет место на жизнь.
вот рабочий вариант кода, но боюсь тут надо запросы пересмотреть, ибо книг в старой базе всего 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);
?>
 
люди, не проходите мимо. зацените код, поможьте страждущим.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху