Запрос в запросе

rooot

Новичок
Запрос в запросе

PHP:
$topname=$_SERVER['QUERY_STRING'];
mysql_connect('localhost', 'root', '');
$result = mysql_list_tables(forum);
while ($row = mysql_fetch_row($result)) {
 
$link = mysql_connect("localhost", "root", "") or die("Could not connect : " . mysql_error());
mysql_select_db("forum") or die("Could not select database");
$query = "select * from `$row[0]` where post='$topname'";
$result = mysql_query($query);
mysql_close($link);
while ($rows = mysql_fetch_array($result, MYSQL_NUM)) {
echo $rows[3]." ".$rows[4]." ".$rows[5]." ".$rows[6]." ".$rows[7]." ".$rows[8]." ";  
}

}
mysql_free_result($result);
Пытаюсь прочитать все таблицы в БД, далее идет цикл который выводит нужное при совпадении. Почему не работает.
 

Serguitar

Новичок->продвинутый
2rooot
Посмотри-ка внимательнее на свой код. Ужас какой-то.
 

rooot

Новичок
выдает только последний результат! т.е. если таблицы имеют записи:
таблицы - запись1- запись2
1 2 4
2 1 3
то результатом поиска
select * from `$row[0](таб1)` where post='$topname(зап1)'
будет 2,4
select * from `$row[0](таб2)` where post='$topname(зап1)'
будет NULL

-~{}~ 15.02.06 11:27:

может проще как то искать по всей бд? т.е. select * from * where post='$topname' такое вообше бывает?

-~{}~ 15.02.06 11:28:

Поправка
таблицы - запись1- запись2
1 - 2 - 4
2 - 1 - 3
 

Фанат

oncle terrible
Команда форума
класс.
остальные хоть спрашивали - делать им для форума одну таблицу, или плодить на каждый топик.
а этот даже не сомневается.

Serguitar,я тебе объясню.
Эти идиотские таблицы у него лежат в отдельной БД. следовательно, для работы с ней надо выбрать бд. какой у нас код этим занимается? копипастим! =)
Так что, то, на что ты обратил внимание, хоть и криво, но, по своему, логично =)
Другое дело, что ему все эти извращения вовсе не нужны.
 

rooot

Новичок
Фанат
ну так не умничай, а дай толковый совет, мудрец блин.
 

rooot

Новичок
Фанат
ну дальше будем уминчать или посоветуешь что толковое? Или кидай в оффтопик, если не стой ноги встал.
 

Фанат

oncle terrible
Команда форума
если я встаю не с той ноги, то кидаю в корзину,а не в оффтопик =)

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

McSimm

Новичок
при том, что как организация бд, так и код действительно приводит в состояние близкое к недоумению :), проблема все же не в диких конструкциях (совершенно лишний коннект в цикле, и прочее - перечислять лень), а в порче переменной $result внутри цикла.
 

zarus

Хитрожопый макак
PHP:
$topname=$_SERVER['QUERY_STRING'];
// Нафига коннектиться к базе в цикле? Достаточно одного непостоянного соединения
$mysql = mysql_connect('localhost', 'root', '') or die("Could not connect, host is unreachable: ".mysql_error());
// Я не врубился, зачем вообще в цилке выбирать каждый раз одну и ту же базу?
mysql_select_db("forum") or die("Could not select database".mysql_error());
// Если надо подключаться к базе только на время выборки данных, то может имеет смысл написать отдельную функцию,
// объединяющую все 3 действия - подключение, запрос, отключение.
$result = mysql_list_tables("forum");
// Такое задание условие более правильное, чем неявное сравнение
// 1.
while (false !== ($row = mysql_fetch_row($result))) {
  $result = mysql_query("SELECT * FROM `".$row[0]."` WHERE `post`='".$topname."'");
  while (false !== ($rows = mysql_fetch_array($result, MYSQL_NUM))) {
    echo $rows[3]." ".$rows[4]." ".$rows[5]." ".$rows[6]." ".$rows[7]." ".$rows[8]."<br />";
  }
}
mysql_close($mysql);
// И вообще, неоптимальный код
// Делаем мегазапрос с объединением, так как все поля в таблицах идентичны
// Даже если не идентичны, тогда SELECT * заменяем на список нужных полей
// 2.
$query = 'SELECT * FROM (';
$query_a = array();
while (false !== ($row = mysql_fetch_row($result))) {
  $query_a[] = "(SELECT ALL `or_table`='".$row[0]."',* FROM `".$row[0]."` WHERE `post`='".$topname."')"
}
$query .= implode('UNION',$query_a).') `t1`';
$result = mysql_query($query);
while (false !== ($rows = mysql_fetch_array($result, MYSQL_NUM))) {
  $arr = array_slice($rows,4,6);
  echo $row[0].": ".implode(" ",$arr)."<br />";
}
 
Сверху