Двойной цикл «Пока» не работает - PullRequest
0 голосов
/ 31 октября 2009

Основываясь на совете, который мне дали на StackOverflow, я попробовал запрос ниже, но он не работал. Я пытаюсь получить список из 25 последних добавленных значений для "сайта" в базе данных, независимо от того, в какой таблице они находятся. Код ниже выдает следующую ошибку:

Предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым ресурсом результата MySQL в domain.php в строке 82

Строка 82 имеет while ($rowa = mysql_fetch_array($indexa))

Есть идеи, почему это не работает?

echo "<table class=\"samples\">";
$index = mysql_query("select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='sitefeather'");
while ($row = mysql_fetch_array($index))
{
    $indexa = mysql_query("select site FROM index order by createdatetime desc limit 25");
    while ($rowa = mysql_fetch_array($indexa))
    {    
        echo '<tr><td><a href="sitelookup3.php?entry='.urlencode($rowa['site']).'&searching=yes&search=search">'.$rowa['site'].'</a></td></tr>';
    }    
}
echo "</table>";

Ответы [ 5 ]

2 голосов
/ 31 октября 2009

Возможно, вам нужна переменная вместо index. Может быть, это?

$indexa = mysql_query("select site FROM {$row['TABLE_NAME']} order by createdatetime desc limit 25");

Однако ... что ты делаешь? Я не знаю, что именно вы пытаетесь сделать, но в моей голове раздаются очень громкие звонки. Наличие динамического имени таблицы в запросе является основным красным флагом и признаком плохого дизайна базы данных.

В моей базе данных есть переменное количество таблиц с одинаковой структурой.

Это плохо.

Что в этих таблицах? Позвольте нам помочь вам собрать все эти данные в одну таблицу.

Самый простой способ - создать одну таблицу с дополнительным столбцом, содержащим имя таблицы, в которой вы в настоящий момент храните каждую строку. Вместо таблиц "foo", "bar" и "baz" создайте одна таблица со столбцом, содержащим в качестве строкового значения «foo», «bar» или «baz».

1 голос
/ 31 октября 2009

Запрос

select site FROM index order by createdatetime desc limit 25

не должно работать. «index» - зарезервированное слово.

Хотите вместо этого использовать $ row ['TABLE_NAME']?

$indexa = mysql_query("select site FROM " + $row['TABLE_NAME'] + " order by createdatetime desc limit 25");
0 голосов
/ 31 октября 2009

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

mysql> create table `index` ( id int(11) );
Query OK, 0 rows affected (0.06 sec)

mysql> show tables like 'index';
+----------------------------+
| Tables_in_umbrella (index) |
+----------------------------+
| index                      | 
+----------------------------+
1 row in set (0.00 sec)

mysql> select * from `index`;
Empty set (0.00 sec)
0 голосов
/ 31 октября 2009

Я думаю, что вы пытаетесь сделать здесь, использовать первый запрос ($ index), чтобы сделать SELECT для всех возвращаемых имен таблиц. В этом случае вы должны делать что-то вроде этого:

echo "<table class=\"samples\">";
// Get a list of table names from the schema
$index = mysql_query("select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='sitefeather'");
while ($row = mysql_fetch_array($index))
{
    // For every table in the schema, select site from it
    $indexa = mysql_query("select site FROM {$row['table_name']} order by createdatetime desc limit 25");
    while ($rowa = mysql_fetch_array($indexa))
    {
        echo '<tr><td><a href="sitelookup3.php?entry='.urlencode($rowa['site']).'&searching=yes&search=search">'.$rowa['site'].'</a></td></tr>';
    }

}
echo "</table>";

Я не уверен, что произойдет ли ошибка, если столбец сайта не существует в некоторых таблицах, к которым вы обращаетесь, но учтите.

0 голосов
/ 31 октября 2009

Ваш внутренний запрос не относится к внешнему запросу, вы можете попробовать это

<?php
echo "<table class=\"samples\">";
$index = mysql_query("select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='jammulinks'");
while ($row = mysql_fetch_row($index))
{
$indexa = mysql_query("select site FROM $row[0] order by createdatetime desc limit 25");//assuming you have site and createddatetime column there.
while ($rowa = mysql_fetch_array($indexa))
{

  echo '<tr><td><a href="sitelookup3.php?entry='.urlencode($rowa['site']).'&searching=yes&search=search">'.$rowa['site'].'</a></td></tr>';
}

}
echo "</table>";
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...