Обновите значение пользовательского столбца sql

Когда за пределами бокса думаешь. Я придумал следующее решение:

$column = 'product';
$enum = '1';

$product_access = $dbh->prepare("UPDATE products_access SET {$column} = :enum WHERE products_access.id = :id");
$product_accessvar = trim($user['id']);
$product_access->bindParam(':id', $product_accessvar, PDO::PARAM_INT);
$product_access->bindParam(':enum', $enum, PDO::PARAM_INT);
//$product_access->bindParam(':product_enum', $enum);
//foreach($_POST["checkbox2"] as $loc_id)
$product_access->execute();

Спасибо за вашу помощь, может быть, я могу помочь кому-то с моим решением. Это работает для меня сейчас!


Ниже мой вопрос

У меня есть вопрос о моем следующем проекте. Я строю таблицу SQL, где пользователи могут добавлять пользовательские столбцы с перечисление значение. Но пользователь также может обновить значение этого столбца. Я не могу установить имя столбца, потому что все они сделаны пользователем, поэтому имя столбца отсутствует.

Мой SQL:

    tabel `products_access`
--

CREATE TABLE IF NOT EXISTS `products_access` (
`id` int(30) NOT NULL,
`user_id` int(30) NOT NULL,
`product 2` enum('0','1') NOT NULL COMMENT 'Dit is een product beschrijving van product 2.dgfdg'
)

Массив:

Array
(
[id] => 17
[name] => product 2
[number] => 2002
[description] => Dit is een product beschrijving van product 2.
[mount] => 34
[price] => 6778
[deleted] => 0
[user_id] => 17
[product 2] => 1
)

Автор сценария:

<label>
<input name="clickedproduct[]" type="checkbox" value="<?php echo $avlue['id']; ?>" <?php echo (($_SERVER['REQUEST_METHOD'] == 'POST') ? ((isset($_POST[$avlue['name']])) ? ' value="'.$avlue[$avlue['name']].'" checked' : ' value="'.$avlue[$avlue['name']].'"') : (($avlue[$avlue['name']] == '1') ? ' value="'.$avlue[$avlue['name']].'"checked' : ' value="'.$avlue[$avlue['name']].'"')); ?>>
<?php echo $avlue['name']; ?>
</label>

PDO:

$product_access = $dbh->prepare('UPDATE products_access() VALUES(:id, :loc)');
$product_access->bindValue(':id', $id);
$product_access->bindParam(':loc', $loc_id);
foreach($_POST["checkbox2"] as $loc_id) $product_access->execute();

Ниже массив после сохранения.

Array
(
[username] => joshua
[rank] => Array
(
[0] => 0
)

[koppel] => Array
(
[0] => 1
)

[clickedproduct] => Array
(
[0] => 17
)
)

Кто-нибудь может объяснить решение?

-1

Решение

Такое приложение обычно реализуется с использованием таблицы метаданных, также известной как хранилище ключей / значений.

Каждая строка этой таблицы метаданных идентифицирует

  1. объект, который он описывает, с product_id или аналогичным внешним ключом.
  2. имя элемента данных, который он содержит, например, «цена» или «крепление»
  3. значение элемента данных, который он содержит, например, 6778 или 34
  4. необязательно код, идентифицирующий тип данных элемента («деньги»? «текст»?)

Добавить метаданные к объекту легко. Вставьте строку в таблицу метаданных, указав желаемое «имя столбца» и значение. Это немного сложнее, чтобы получить его. Вам нужен запрос, например, такой.

 SELECT p.product_id, a.val as price, b.val as mount
FROM product p
LEFT JOIN metadata a ON a.product_id = p.product_id AND a.key='price'
LEFT JOIN metadata b ON b.product_id = p.product_id AND b.key='mount'

WordPress-х таблица wp_postmeta Настройка является хорошим и широко используемым примером этого шаблона проектирования данных. Оно имеет работоспособный API.

Обычно считается плохой практикой использовать команды языка определения данных (например, ALTER TABLE CHANGE colname newcolname INT) в производстве. С одной стороны, эти команды довольно медленные и небезопасные. С другой стороны, когда схема содержит все виды пользовательских столбцов, трудно устранить неполадки. Вам лучше использовать код приложения, как я предложил здесь, чтобы позволить вашим пользователям создавать свои собственные ключи данных и значения.

1

Другие решения

  • Создайте столбец с именем «custom_column» в «products_access». (Добавить пользователя
    определенное имя столбца здесь)
  • Создайте другую таблицу с именем ‘tbl_custom_column’
  • Добавьте поля ‘user_id’, ‘custom_column_value’ (Добавьте ваши значения здесь)

Надеюсь, что это поможет.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector