![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Описание: Имеется много таблиц имена которых хранятся в отдельной таблице, нужно произвести поиск последовательно во всех таблицах, выбирая имена из таблицы с именами.
Пример: на складе есть большое количество ящиков с ячейками, в которых хранятся детали, каждая деталь имеет артикль (цифровой номер). Если из формы сделать запрос по номеру ящика и артиклю, то можно воспользоваться следующим кодом:
<?
$article = $_GET['article'];
$table = $GET['box'];
// Соединиться с Базой Данных mySQL
$connection=mysql_connect ($baseURL, $username, $password);
if (!$connection) {
die('Невозможно соединиться с базой данных: ' . mysql_error());
}
// Активировать Базу Данных mySQL
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die ('Нельзя использовать БД : ' . mysql_error());
}
// Выборка строк таблицы в Базе Данных по условию
$query = "SELECT * FROM $table WHERE '$article' >= start and '$article' <= stop";
$result = mysql_query($query);
if (!$result) {
die('Неверный запрос: ' . mysql_error());
}
//Подсчет найденных строк в таблице Базы Данных.
$n=mysql_num_rows($result);
if ($n==0)
{echo "Деталь артикль: $article в ящике $table не найдена! <br>";}
else
echo "Деталь артикль: $article находится в ящике <b>$table</b><br>";
?>Все работает!
Сделали таблицу с номерами ящиков и дополнительными реквизитами.
попробовали автоматизировать поиск:
<?
$article = $_GET['article'];
// Соединиться с Базой Данных mySQL
$connection=mysql_connect ($baseURL, $username, $password);
if (!$connection) {
die('Невозможно соединиться с базой данных: ' . mysql_error());
}
// Активировать Базу Данных mySQL
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die ('Нельзя использовать БД : ' . mysql_error());
}
$sql = mysql_query("SELECT * FROM sklad;");
if (!$sql) {
die('Неверный запрос: ' . mysql_error());
}
else
{
while ($row = mysql_fetch_assoc($sql))
{
$table = $row[box];
// Выборка строк таблицы в Базе Данных по условию
$query = "SELECT * FROM $table WHERE '$article' >= start and '$article' <= stop";
$result = mysql_query($query);
if (!$result) {
die('Неверный запрос: ' . mysql_error());
}
//Подсчет найденных строк в таблице Базы Данных.
$n=mysql_num_rows($result);
if ($n==0)
{echo "Деталь артикль: $article в ящике $table не найдена! <br>";}
else
echo "Деталь артикль: $article находится в ящике <b>$table</b><br>";
}
}
?>В результате получаем ошибку при обращении к таблице:
$query = "SELECT * FROM $table WHERE '$article' >= start and '$article' <= stop";
Помогите разобраться, пожалуйста...
Отредактированно star-ik (23.06.2008 09:34:38)
Неактивен

Приведите пожалуйста текст ошибки, которую Вы получаете.
Неактивен
В результате получаем ошибку при обращении к таблице:
$query = "SELECT * FROM $table WHERE '$article' >= start and '$article' <= stop";
Неверный запрос: Table '$database.$table' doesn't exist ,
где :
$database - имя базы данных,
$table - имя таблицы считанное по предыдущему запросу:
$sql = mysql_query("SELECT * FROM sklad;");
while ($row = mysql_fetch_assoc($sql))
{
$table = $row[box];
.........
}
Отредактированно star-ik (23.06.2008 09:57:42)
Неактивен

Ну так у Вас просто нет такой таблицы, судя по ошибке?
Неактивен
Спасибо за поддержку.
Ошибка была в таблице sklad в колонке box, а не в скрипте.
Из-за неправильной информации в колонке box , было обращение к несуществующей таблице.
Причем ошибка была в первой строке таблицы, поэтому поиск прекращался сразу при обращении к первой таблице!
Неактивен