Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как вывести комментарии из разных БД?
 
 автор: liberty   (05.02.2013 в 07:51)   письмо автору
 
 

Добрый день!
Вывожу комментарии из bd1

<?php
include ("blocks/bd1.php");
$result mysql_query("SELECT * FROM comment1 ORDER BY date DESC LIMIT 5"$db);
if(
mysql_num_rows($result) > 0)
{
$comment mysql_fetch_array($result);
do
{
$author $comment["author"];
$post $comment["post"];
$text $comment["text"];


printf("<a href='post1.php?id_ccuz=%s'> %s %s</a>",$post,$author,$text);
}
while (
$comment mysql_fetch_array($result));
}

?>

Как тут же выводить комменты из баз bd2,...,bd5 ?
Структура таблиц для комментов идентичная.
Отличается лишь подключение к БД
include ("blocks/bd1.php");... include ("blocks/bd5.php");

и ссылки
<a href='post1.php?id_ccuz=%s'>... <a href='post5.php?id_ccuz=%s'>

  Ответить  
 
 автор: Valick   (05.02.2013 в 10:20)   письмо автору
 
   для: liberty   (05.02.2013 в 07:51)
 

Для начала надо избавится от видеокурса Е Попова и купить нормальную книгу для изучения основ.
Расскажите почему у вас существуют bd2,...,bd5 ?

  Ответить  
 
 автор: CodeEater   (08.02.2013 в 00:41)   письмо автору
 
   для: Valick   (05.02.2013 в 10:20)
 

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

  Ответить  
 
 автор: Valick   (08.02.2013 в 00:48)   письмо автору
 
   для: CodeEater   (08.02.2013 в 00:41)
 

http://softtime.ru/php5/index.php

  Ответить  
 
 автор: CodeEater   (08.02.2013 в 01:08)   письмо автору
 
   для: Valick   (08.02.2013 в 00:48)
 

вау... как много.... огромное спс...... Надеюсь, они окажутся полезными......

  Ответить  
 
 автор: CodeEater   (08.02.2013 в 01:17)   письмо автору
 
   для: Valick   (08.02.2013 в 00:48)
 

дааа... здесь офигительное чтиво( видно по оглавлениям)....... и все книги от "Кузнецов и Симдянов".....

  Ответить  
 
 автор: Igorek   (08.02.2013 в 05:47)   письмо автору
 
   для: Valick   (05.02.2013 в 10:20)
 

что же это за чудо такое? жуть как интересно!
можно линку на видео, где рассказывается про 600 таблиц?

  Ответить  
 
 автор: CrazyAngel   (05.02.2013 в 14:45)   письмо автору
 
   для: liberty   (05.02.2013 в 07:51)
 

Идентификатор $db у вас зачем? (в mysql_query)

  Ответить  
 
 автор: liberty   (05.02.2013 в 15:20)   письмо автору
 
   для: CrazyAngel   (05.02.2013 в 14:45)
 

> Расскажите почему у вас существуют bd2,...,bd5 ?
bd2,...,bd5 существуют.
ну не могу же я загнать 600 таблиц в одну базу данных.
Вероятно могу, но будет не удобно.

>Идентификатор $db у вас зачем? (в mysql_query)
честно говоря, не знаю.
знания php еще те.
но тем не менее этот скрипт работает.

P.S. Да, купил хорошую книгу по PHP.
Но надо время чтобы постичь, а помощь нужна сейчас )))

  Ответить  
 
 автор: CrazyAngel   (05.02.2013 в 16:08)   письмо автору
 
   для: liberty   (05.02.2013 в 15:20)
 

Это идентификатор базы данных. Соответственно его имя надо изменить в файлах подключения

  Ответить  
 
 автор: psychomc   (05.02.2013 в 15:57)   письмо автору
 
   для: CrazyAngel   (05.02.2013 в 14:45)
 

чтобы делать запросы к разным базам данных, естественно

  Ответить  
 
 автор: liberty   (06.02.2013 в 03:53)   письмо автору
 
   для: psychomc   (05.02.2013 в 15:57)
 

я видимо не понятно выразил свою мысль.
так будет лучше.

надо объединить и вывести комменты из разных БД в одном блоге с сортировкой по дате.

<?php 
include ("blocks/bd1.php"); 
$result mysql_query("SELECT * FROM comment1 ORDER BY date DESC LIMIT 5"$db); 
if(
mysql_num_rows($result) > 0

$comment mysql_fetch_array($result); 
do 

$author $comment["author"]; 
$post $comment["post"]; 
$text $comment["text"]; 


printf("<a href='post1.php?id1=%s'> %s %s</a>",$post,$author,$text); 

while (
$comment mysql_fetch_array($result)); 


?>


<?php 
include ("blocks/bd2.php"); 
$result mysql_query("SELECT * FROM comment2 ORDER BY date DESC LIMIT 5"$db); 
if(
mysql_num_rows($result) > 0

$comment mysql_fetch_array($result); 
do 

$author $comment["author"]; 
$post $comment["post"]; 
$text $comment["text"]; 


printf("<a href='post2.php?id2=%s'> %s %s</a>",$post,$author,$text); 

while (
$comment mysql_fetch_array($result)); 


?>


таблицы идентичны по структуре.

  Ответить  
 
 автор: CrazyAngel   (06.02.2013 в 05:23)   письмо автору
 
   для: liberty   (06.02.2013 в 03:53)
 

Тогда предварительно собрать все данные со всех бд в 1 массив и перед выводом отсортировать его.

P.S. E вас точно разные БД, а не просто разные таблицы?)

  Ответить  
 
 автор: liberty   (06.02.2013 в 07:15)   письмо автору
 
   для: CrazyAngel   (06.02.2013 в 05:23)
 

да точно. у меня разные БД.
Как сделать запрос для массива?

  Ответить  
 
 автор: Igorek   (06.02.2013 в 07:57)   письмо автору
 
   для: liberty   (06.02.2013 в 07:15)
 

навскидку:
<?
$arr 
= array();
for (
$i=1$i<=5$i++) 
{
include (
"blocks/bd$i.php");  
$result mysql_query("SELECT * FROM comment$i LIMIT 5"$db);  
while (
$comment mysql_fetch_array($result))
{  
$author $comment["author"];  
$post $comment["post"];  
$text $comment["text"];  
$date $comment["date"]

$arr[$date] = sprintf("<a href='post%d.php?id%d=%s'> %s %s</a>",$i,$i,$post,$author,$text);  
}  
mysql_close($db) ;
}

krsort($arr);
foreach (
$arr as $date => $link) {
   echo 
"$date - $link<br>";
}


PS если у вас бд на одном сервере крутятся, то необязательно новое подключение создавать, достаточно заюзать другую бд: "USE bd2;"

  Ответить  
 
 автор: liberty   (06.02.2013 в 08:08)   письмо автору
 
   для: Igorek   (06.02.2013 в 07:57)
 

спасибо.
я вам в качества примера привел эти базы данных bd1...bd5
фактически вместо цифр там буквы.

и здесь вместо цифр post1...post5 тоже буквы.

comment1 - вместо цифр тоже буквы.

Сорри.

  Ответить  
 
 автор: Igorek   (06.02.2013 в 08:19)   письмо автору
 
   для: liberty   (06.02.2013 в 08:08)
 

создайте массив настроек подключений, как-то так:
<?
$conns 
= array(
  
=> array(
    
'host' => 'host1',
    
'db' => 'bd1',
    
'user' => 'user1',
    
'pass' => 'pass1',
    
'table' => 'table1',
    
'post' => 'post1'
  
),
  
=> array(
    
'host' => 'host2',
    
'db' => 'bd2',
    
'user' => 'user2',
    
'pass' => 'pass2',
    
'table' => 'table2',
    
'post' => 'post2'
  
),
  ...
)

foreach (
$conns as $conn) {
   
$db mysql_connect($conn['host'], $conn['user'], $conn['pass']);
   ...
}

  Ответить  
 
 автор: Valick   (06.02.2013 в 09:13)   письмо автору
 
   для: liberty   (06.02.2013 в 08:08)
 

ну не могу же я загнать 600 таблиц в одну базу данных.
почему у вас 600 таблиц? это многовато для блога
чем вы руководствовались при создании таблиц?
создаются ли у вас таблицы автоматически в процессе работы скрипта?

  Ответить  
 
 автор: Igorek   (06.02.2013 в 09:36)   письмо автору
 
   для: Valick   (06.02.2013 в 09:13)
 

IMHO, 600 таблиц создать в одной БД не проблема, а здесь речь идет о горизонтальном шардинге, раз пришлось комменты размазывать по нескольким БД, но тогда их (комментов) должно быть очень много, иначе такой подход только оверхед с геморром принесет))

  Ответить  
 
 автор: psychomc   (06.02.2013 в 14:09)   письмо автору
 
   для: liberty   (06.02.2013 в 03:53)
 

а может лучше сделать по-человечески, т.е слить все комментарии в одну БД и работать уже с ней. или они на разных серверах находятся?

  Ответить  
 
 автор: CodeEater   (08.02.2013 в 00:34)   письмо автору
 
   для: liberty   (05.02.2013 в 07:51)
 

проблема решается , ели использовать не MySQL, а PDO...Подробнее здесь http://docs.php.net/mysqli.overview.php, И ЗДЕСЬ http://docs.php.net/manual/ru/book.pdo.php

  Ответить  
 
 автор: Valick   (08.02.2013 в 00:39)   письмо автору
 
   для: CodeEater   (08.02.2013 в 00:34)
 

проблема решается , ели использовать не MySQL, а PDO
PDO - это всего лишь прослойка между РНР и MySQL(или другой СУРБД)
и уж неоправданное количество баз данных проблему никак не решает
в принципе и проблемы то не было-бы если бы ее не создавали
проблема в видимокурсах Е. Попова, оттуда и растут ноги этих 600 таблиц с множеством БД

  Ответить  
 
 автор: CodeEater   (08.02.2013 в 00:49)   письмо автору
 
   для: Valick   (08.02.2013 в 00:39)
 

Согласен, у этого Попова все очень поверхностно.... А вы по книгам обучались, или.....? Если да, то укажите хотя-бы одну....

  Ответить  
 
 автор: Valick   (08.02.2013 в 01:41)   письмо автору
 
   для: CodeEater   (08.02.2013 в 00:49)
 

кроме книг авторов этого форума, у меня много и забугорных авторов, но они еще не распакованы после переезда.

  Ответить  
 
 автор: CodeEater   (08.02.2013 в 00:58)   письмо автору
 
   для: Valick   (08.02.2013 в 00:39)
 

......хотя есть видеокурс от Науменко Д. - PHP и CodeIgniter с нуля 2010...... Но чтобы его пройти, нужно запастись RED BULLом.... иначе человек просто заснет.....

  Ответить  
 
 автор: liberty   (10.02.2013 в 06:56)   письмо автору
 
   для: CodeEater   (08.02.2013 в 00:58)
 

да можно слить все в одну базу. но мороки сколько?
вот как у меня сейчас работает.
выводятся комменты с разных БД.
<!--Вывод comments--><?php
include ("blocks/bd.php");
$result mysql_query("SELECT * FROM comment_ege ORDER BY date DESC LIMIT 3"$db);
if(
mysql_num_rows($result) > 0)
{
$comment mysql_fetch_array($result);
do
{
$author $comment["author"];
$post $comment["post"];
$text $comment["text"];
/
          
// далее сокращаем коммент до 75 символов
if (strlen($text) > 75 ) {
    
$text substr($text075).'...';
}
printf("<a href='view_post_ege.php?id=%s'><div class='comment-content2'>
       <h6>%s</h6>
       <p>%s</p></a>
       </div> 
       "
,$post,$author,$text);
}
while (
$comment mysql_fetch_array($result));
}

          
// выводим комменты из другой базы данных
include ("blocks/bd_ccuz.php");
$result mysql_query("SELECT * FROM comment_ccuz ORDER BY date DESC LIMIT 2"$db);
if(
mysql_num_rows($result) > 0)
{
$comment mysql_fetch_array($result);
do
{
$author $comment["author"];
$post $comment["post"];
$text $comment["text"];
if (
strlen($text) > 75 ) {
    
$text substr($text075).'...';
}
printf("<a href='post_ccuz.php?id_ccuz=%s'><div class='comment-content2'>
       <h6>%s</h6>
       <p>%s</p></a>
       </div> 
       "
,$post,$author,$text);
}
while (
$comment mysql_fetch_array($result));
}
?>    

все работает. осталось их тока соединить и выводить по очередности согласно дате.

  Ответить  
 
 автор: Valick   (10.02.2013 в 07:26)   письмо автору
 
   для: liberty   (10.02.2013 в 06:56)
 

просто нет слов...
думаю хостер убьет ваш сайт без объяснения причин

  Ответить  
 
 автор: liberty   (10.02.2013 в 08:39)   письмо автору
 
   для: Valick   (10.02.2013 в 07:26)
 

Valick я обратил на Вас внимание, на Ваши посты.
Спасибо за замечание, но могли бы Вы быть ответить по существу вопроса и не отсылать, как часто вы делаете, к учебнику по PHP?

  Ответить  
 
 автор: Valick   (10.02.2013 в 09:06)   письмо автору
 
   для: liberty   (10.02.2013 в 08:39)
 

А как я вам отвечу по существу, если все что вы написали в корне неправильно и это неправильно началось еще на уровне проектировки БД
Совет купить хорошую книгу при данном раскладе это все что я могу.
Вы написали, что уже купили книгу. Напишите название и авторов.

  Ответить  
 
 автор: liberty   (10.02.2013 в 09:08)   письмо автору
 
   для: Valick   (10.02.2013 в 09:06)
 

Head first PHP & MySQL - автор Lynn Beighley

  Ответить  
 
 автор: cheops   (10.02.2013 в 09:08)   письмо автору
 
   для: liberty   (10.02.2013 в 06:56)
 

Обычно не используют два вызова функции (это не профессионально)
<?php
  $comment 
mysql_fetch_array($result); 
  do 
  { 
   ...
  } 
  while (
$comment mysql_fetch_array($result));
?>
если можно обойтись одним
<?php
  
while ($comment mysql_fetch_array($result));
  { 
   ...
  } 
?>

  Ответить  
 
 автор: Valick   (10.02.2013 в 10:49)   письмо автору
 
   для: cheops   (10.02.2013 в 09:08)
 

Игорь Вячеславович, вызов функции это мелочь по сравнению со всем остальным.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования