|
Автор |
Сообщение |
alexander4321
Новенький
Зарегистрирован: 27.09.2012 Сообщения: 28
|
|
|
|
Добрый день! Нужен скрипт для выборки записей из одной таблицы в БД и записи их в другую таблицу.
Сделал 2 файла.
1) search.html
<form action="search.php" method="post">
Каталожный номер детали</br>
<input type="text" name="num" size="60" value="">
<input type="submit" name="submit" value="Искать">
<input type="reset" name="reset" value="Очистить">
</form>
2) search.php
<?php
include "config.php";
mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname);
$q = "SELECT * FROM kuzov WHERE UPPER(cat_num) LIKE '%".strtoupper($_POST['num'])."%'";
$r = mysql_query($q) or die("неправильный запрос");
echo "<table border=1>";
while ($row = mysql_fetch_array($r))
echo "<tr><td>", $row["cat_num"], "</td><td>", $row["descr"], "</td><td>", $row["amount"], "</td><td>", $row["price"], "</td><td>", $row["company"], "</td></tr>";
echo "</table>";
mysql_free_result($r);
?>
Так вот, вместо вывода на экран я хочу записать выбранные данные в другую таблицу. Соответственно, определенное поле полученного результата должно быть записано в определенное поле новой таблицы. Не подскажите порядок действий после получения данных из таблицы kuzov? Видимо, результаты вывода каждого поля должны быть записаны в переменные? |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
alexander4321
Новенький
Зарегистрирован: 27.09.2012 Сообщения: 28
|
|
|
|
Спасибо за подсказку! Все получилось, вот код:
include "config.php";
$delete = "delete from avtom";
$order_db = "avtom";
$order_q = "INSERT INTO avtom SELECT * FROM kuzov WHERE UPPER(cat_num) LIKE '%".strtoupper($_POST['num'])."%'";
mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_select_db($dbname);
mysql_query('SET NAMES windows-1251');
mysql_query($delete) or die(mysql_error());
mysql_query($order_q) or die(mysql_error());
?>
Только мне не нравится длинная запись переменной $order_q. Не подскажете, как можно в значение переменной записать значение другой переменной?
Например, объявляю переменные
$q = "SELECT * FROM kuzov WHERE UPPER(cat_num) LIKE '%".strtoupper($_POST['num'])."%'";
$order_q = "INSERT INTO $order_db $q";
Далее выполняю
mysql_query($order_q) or die(mysql_error()); .
Так намного короче, но не работает. Спасибо! |
|
Вернуться к началу |
|
|
alexander4321
Новенький
Зарегистрирован: 27.09.2012 Сообщения: 28
|
|
|
|
Усложняю задачу. Есть две таблицы - одна с прайс-листом (kuzov), содержит 5 полей: cat_num, descr, amount, price, company. Другая таблица (order) с заказами содержит поля такого же типа с префиксом order_. До этого я просто записывал данные из одной таблицы в другую, сейчас требуется записать данные из одной таблицы в другую при условии, что такая запись там отсутствует. В случае нахождения подобной записи новая запись не производится, а просто изменяется значение одного из полей совпадающей записи (в данном случае числовое значение поля order_amount увеличивается на требуемую величину).
Нашел код SQL для поиска соответствующих записей в разных таблицах
SELECT `cat_num` , COUNT( * )
FROM kuzov
JOIN order ON ( `cat_num` = `order_cat_num` )
LIMIT 0 , 30
Соответствующие записи находятся.
Также нашел пример другого кода:
INSERT INTO order (`order_cat_num`,`order_descr`, `order_amount`, `order_price`, `order_company`)
данные, которые вставляем
FROM dual
WHERE NOT EXISTS (SELECT `order_cat_num` FROM avtom
WHERE `order_cat_num` = `данные из столбца cat_num таблицы kuzov`);
Не могу сообразить, как все это совместить. Что касается последнего кода, интересует вопрос, можно ли в SQL коде использовать значения переменных. Например, если значения выведенных данных из таблицы kuzov записать в переменные, то можно ли вставлять их в таблицу order следующим образом INSERT .... VALUES("$i', "$num" и т. д.). |
|
Вернуться к началу |
|
|
alexander4321
Новенький
Зарегистрирован: 27.09.2012 Сообщения: 28
|
|
|
|
Привожу код, который работает
INSERT INTO order (`order_cat_num`,`order_descr`, `order_amount`, `order_price`, `order_company`)
SELECT 'RA1475', 'ПРУЖИНА ПОДВЕСКИ K-FLEX', '4', '915,11', 'KYB'
FROM dual
WHERE NOT EXISTS (SELECT `order_cat_num` FROM order
WHERE `order_cat_num` = 'RA1475');
В данном коде поиск происходит по полю `order_cat_num` таблицы order. Сам каталожный номер я вручную записал в код 'RA1475'. Но я хочу сделать, чтобы этот номер брался из поля cat_num таблицы kuzov.
Вот меня и интересует, можно ли в последнюю строчку (или в какую потребуется) данного кода вместо вручную вписанного значения 'RA1475' подставить значение переменной, содержащей этот код?
Последний раз редактировалось: alexander4321 (Сб Окт 27, 2012 4:57 am), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
AcetonKZ
Участник тусовки
Зарегистрирован: 22.11.2011 Сообщения: 208 Откуда: караганда
|
|
|
|
А нафига дублировать данные?
Не проще в таблице ордер просто ссылаться на уникальный ключ из таблицы с деталями?
Сам я давненко с базами руками не работал, кода сейчас не напишу , но точно могу сказать ,что дублировать данные не нужно, следовательно таблица уброщается ,а раз проще - значит надежнее. _________________ всегда пользуюсь ремнем безопасности
"Некоторые вещи нам не понятны не потому, что наши понятия слабы, а потому что сии вещи не входят в круг наших понятий". (К. Прутков) |
|
Вернуться к началу |
|
|
alexander4321
Новенький
Зарегистрирован: 27.09.2012 Сообщения: 28
|
|
|
|
Ничего, если сам себе немного поотвечаю? Во всяком случае, покуда смогу.
1) Создаю переменную, в которой будет храниться значение, введенное в HTML форме в окне поиска
$search = "'%".strtoupper($_POST['num'])."%'";
2) Последняя строка кода меняется на WHERE `order_cat_num` = '$$search');
3) Как я понял, в последней строке записано условие, после проверки которого либо будет произведена запись в БД, либо нет.
Тогда в строку SELECT 'RA1475', 'ПРУЖИНА ПОДВЕСКИ K-FLEX', '4', '915,11', 'KYB' вместо значений необходимо подставить ссылки на переменные или на массив с данными, полученными из таблицы с kuzov? |
|
Вернуться к началу |
|
|
alexander4321
Новенький
Зарегистрирован: 27.09.2012 Сообщения: 28
|
|
|
|
AcetonKZ писал(а): |
Не проще в таблице ордер просто ссылаться на уникальный ключ из таблицы с деталями?
|
Может и проще. Только прайс-лист должен обновляться через определенное время. Соответственно, если позиция пропадет из прайс-листа, то на что тогда будет ссылаться таблица ордер? Например, у поставщика была последняя деталь, мы ее заказали, он нам ее зарезервировал, в его остатках деталь пропала, в этот момент мы обновили прайс-лист этого поставщика. Как мы сможем тогда найти вообще этот заказ? |
|
Вернуться к началу |
|
|
|
|
 Главная страница сайта
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|