SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.06.2008 02:08:05

star-ik
Участник
Зарегистрирован: 06.06.2008
Сообщений: 14

Имя таблицы выбирается из другой таблицы.

Описание: Имеется много таблиц имена которых хранятся в отдельной таблице, нужно произвести поиск последовательно во всех таблицах, выбирая имена из таблицы с именами.
Пример: на складе есть большое количество ящиков с ячейками, в которых хранятся детали, каждая деталь имеет артикль (цифровой номер). Если из формы сделать запрос по номеру ящика и артиклю, то можно воспользоваться следующим кодом:

Код:

<?
$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)

Неактивен

 

#2 23.06.2008 04:53:03

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Имя таблицы выбирается из другой таблицы.

Приведите пожалуйста текст ошибки, которую Вы получаете.

Неактивен

 

#3 23.06.2008 09:32:41

star-ik
Участник
Зарегистрирован: 06.06.2008
Сообщений: 14

Re: Имя таблицы выбирается из другой таблицы.

В результате получаем ошибку при обращении к таблице:

$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)

Неактивен

 

#4 23.06.2008 12:53:35

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Имя таблицы выбирается из другой таблицы.

Ну так у Вас просто нет такой таблицы, судя по ошибке?

Неактивен

 

#5 23.06.2008 14:03:23

star-ik
Участник
Зарегистрирован: 06.06.2008
Сообщений: 14

Re: Имя таблицы выбирается из другой таблицы.

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson