Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Вывод результатов поиска из таблицы и запись их в другую.

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
alexander4321

Новенький


Зарегистрирован: 27.09.2012
Сообщения: 28

СообщениеДобавлено: Вт Окт 23, 2012 2:09 pm    Заголовок сообщения: Вывод результатов поиска из таблицы и запись их в другую.
Ответить с цитатой

Добрый день! Нужен скрипт для выборки записей из одной таблицы в БД и записи их в другую таблицу.
Сделал 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
Откуда: Кировоград, Украина

СообщениеДобавлено: Вт Окт 23, 2012 6:10 pm    Заголовок сообщения:
Ответить с цитатой

Вот готовое решение

http://www.dkws.org.ua/phpbb2/viewtopic.php?t=5304
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
alexander4321

Новенький


Зарегистрирован: 27.09.2012
Сообщения: 28

СообщениеДобавлено: Ср Окт 24, 2012 6:10 am    Заголовок сообщения:
Ответить с цитатой

Спасибо за подсказку! Все получилось, вот код:
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

СообщениеДобавлено: Пт Окт 26, 2012 9:43 am    Заголовок сообщения:
Ответить с цитатой

Усложняю задачу. Есть две таблицы - одна с прайс-листом (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

СообщениеДобавлено: Пт Окт 26, 2012 10:18 am    Заголовок сообщения:
Ответить с цитатой

Привожу код, который работает
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
Откуда: караганда

СообщениеДобавлено: Пт Окт 26, 2012 11:30 am    Заголовок сообщения:
Ответить с цитатой

А нафига дублировать данные?
Не проще в таблице ордер просто ссылаться на уникальный ключ из таблицы с деталями?
Сам я давненко с базами руками не работал, кода сейчас не напишу , но точно могу сказать ,что дублировать данные не нужно, следовательно таблица уброщается ,а раз проще - значит надежнее.
_________________
всегда пользуюсь ремнем безопасности
"Некоторые вещи нам не понятны не потому, что наши понятия слабы, а потому что сии вещи не входят в круг наших понятий". (К. Прутков)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alexander4321

Новенький


Зарегистрирован: 27.09.2012
Сообщения: 28

СообщениеДобавлено: Пт Окт 26, 2012 11:37 am    Заголовок сообщения:
Ответить с цитатой

Ничего, если сам себе немного поотвечаю? Во всяком случае, покуда смогу.
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

СообщениеДобавлено: Пт Окт 26, 2012 11:45 am    Заголовок сообщения:
Ответить с цитатой

AcetonKZ писал(а):

Не проще в таблице ордер просто ссылаться на уникальный ключ из таблицы с деталями?

Может и проще. Только прайс-лист должен обновляться через определенное время. Соответственно, если позиция пропадет из прайс-листа, то на что тогда будет ссылаться таблица ордер? Например, у поставщика была последняя деталь, мы ее заказали, он нам ее зарезервировал, в его остатках деталь пропала, в этот момент мы обновили прайс-лист этого поставщика. Как мы сможем тогда найти вообще этот заказ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис