Система заказов - идентификационный номер для заказа (не строки) в MySQL - PullRequest
0 голосов
/ 05 ноября 2010

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

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Cannot connect to mysql server");
           mysql_select_db($dbname) or die("Cannot select database");

            if (isset($_POST['data']) && is_array($_POST['data'])) {
                foreach ($_POST['data'] as $row => $data) {
                    $result = mysql_query("INSERT INTO orders (id,project_ref,supp_short_code,om_part_no,description,quantity,cost_of_items,cost_total) VALUES('', '".$data['project_ref']."', '".$data['supp_short_code']."', '".$data['om_part_no']."', '".$data['description']."', '".$data['quantity_input']."', '".$data['cost_of_items']."', '".$data['cost_total_td']."') ") or die(mysql_error());
                }
            }

Что здорово (и я знаю, что яЯ не защищаю от SQL-инъекций и т. д.), но может быть несколько строк, вставленных в БД с использованием приведенного выше кода, но мне нужно, чтобы пользователь позже смог отозвать заказ на основе одного идентификационного номера.Итак, как мне вставить номер идентификатора в этот запрос вставки, чтобы он соответствовал всем строкам и определенно уникален в БД и в идеальном случае автоинкрементно (я знаю, что это будет сложно, учитывая наличие нескольких строк!)

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

Добавьте столбец к вашей таблице orders с именем BatchID.Затем сгенерируйте GUID в PHP и измените соответствующий оператор INSERT.

Подробнее о создании GUID см. Здесь .

function GUID()
{
    if (function_exists('com_create_guid') === true)
    {
        return trim(com_create_guid(), '{}');
    }

    return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}
1 голос
/ 05 ноября 2010

В таком случае я бы сделал две таблицы: orders и order_detail

Таблица orders будет иметь ваши grand totals, order date, customer id и т. Д.

Таблица order_detail будет иметь запись для каждого отдельного элемента .. part_no, quantity, cost, extended_cost, но будет ссылаться на таблицу orders с помощью order_id.

В итоге вы бы выбрали:

SELECT * FROM orders JOIN order_detail ON orders.order_id = order_detail.order_id WHERE orders.order_id = '1'

1 голос
/ 05 ноября 2010

Предполагая, что ваше поле 'id' предназначено для хранения идентификатора автоинкремента для каждого заказа, вы захотите добавить новую вставку перед вашей текущей инструкцией вставки, которая просто добавит запись в таблицу с автоинкрементным первичнымключ.Затем возьмите этот новый первичный ключ и свяжите его с текущей таблицей вместо текущего «id» или в дополнение к текущему полю «id».

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Cannot connect to mysql server");
       mysql_select_db($dbname) or die("Cannot select database");

        if (isset($_POST['data']) && is_array($_POST['data'])) {
            result = mysql_query("INSERT INTO orders_to_order SET order_primary = NULL");
            $orderId = mysql_insert_id();
            foreach ($_POST['data'] as $row => $data) {
                $result = mysql_query("INSERT INTO orders (id,project_ref,supp_short_code,om_part_no,description,quantity,cost_of_items,cost_total) VALUES(".$orderId.", '".$data['project_ref']."', '".$data['supp_short_code']."', '".$data['om_part_no']."', '".$data['description']."', '".$data['quantity_input']."', '".$data['cost_of_items']."', '".$data['cost_total_td']."') ") or die(mysql_error());
            }
        }
...