如果MYSQL中的值被更新,其他值改变
Posted
技术标签:
【中文标题】如果MYSQL中的值被更新,其他值改变【英文标题】:If value in MYSQL is updated, other values changes 【发布时间】:2013-02-24 14:27:17 【问题描述】:我试图让当一个mysql属性的值发生变化时,其他属性的其他值也会发生变化。
例如:
我有值为“RED”的 color_scheme 属性。 如果 color_scheme 值更改为“BLUE”,则值:
menu_color changes to #30618F
font_color changes to #FFFFFF
footer_color changes to #1A92CA
有可能吗?
并且它必须只更新一次值,因为用户必须能够单独更改特定属性(如 menu_color、font_color、footer_color)。
就像这样:
【问题讨论】:
能否提供一个表结构和一些示例数据? 添加了图片,我认为它很到位。 好吧,你是什么意思改变?你的意思是随机的新颜色数字还是要加载一个方案。 我正在编写一个示例,但完成它需要时间。 您使用哪种编程语言? php?你的问题被标记为 mysql 然后你得到一个 mysql 答案,因为我认为你可以在你的代码中实现它。 【参考方案1】:试试这个:
CREATE TABLE color_scheme (
id_color_sheme INT AUTO_INCREMENT PRIMARY KEY,
color_esquema VARCHAR(30),
color_front_banners VARCHAR(7),
color_front_banners_bottom VARCHAR(7),
color_front_botoes VARCHAR(7),
color_front_links VARCHAR(7),
color_front_menu VARCHAR(7),
color_front_rodape VARCHAR(7),
index(color_esquema)
);
CREATE TABLE user_interface (
id INT AUTO_INCREMENT PRIMARY KEY,
color_front_banners VARCHAR(7),
color_front_banners_bottom VARCHAR(7),
color_front_botoes VARCHAR(7),
color_front_links VARCHAR(7),
color_front_menu VARCHAR(7),
color_front_rodape VARCHAR(7)
);
-- SAMPLE DATA
INSERT INTO user_interface (
color_front_banners,
color_front_banners_bottom,
color_front_botoes,
color_front_links,
color_front_menu,
color_front_rodape)
VALUES ('#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF'),
('#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE') ;
INSERT INTO color_scheme (color_esquema,
color_front_banners,
color_front_banners_bottom,
color_front_botoes,
color_front_links,
color_front_menu,
color_front_rodape)
VALUES ('black','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF'),
('grey','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE') ;
-- UPDATE based on color_esquema
SET @color_name := 'black';
UPDATE user_interface
SET
color_front_banners = (
SELECT color_front_banners FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_banners_bottom = (
SELECT color_front_banners_bottom FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_botoes = (
SELECT color_front_botoes FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_links = (
SELECT color_front_links FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_menu = (
SELECT color_front_menu FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_rodape = (
SELECT color_front_rodape FROM color_scheme
WHERE color_esquema = @color_name )
WHERE id = 2;
-- If you want to change just one color, you can use this query.
UPDATE user_interface
SET
color_front_botoes = '#DDDDDD'
WHERE id = 1;
这是如何工作的?首先,您创建一个带有颜色的表(例如“color_scheme”)。然后你从插入到你的'user_interface'表中的这个表中获取值(例如'blue','#....',...)。顺便说一句,我假设您会将其用于用户界面。无论如何,您可以根据需要采用它。需要注意的重要一点是,您只能更新首次插入数据库的数据。因此,您应该在添加用户时使用默认颜色。我什至建议您使用颜色创建一个单独的表,与用户表分开。
接下来您要根据所选配色方案更新默认颜色。假设您想使用“蓝色”。然后您应该使用更新查询来更新 user_interface 表(或颜色表)中的值。最基本的方法是像我一样做子查询,然后说 WHERE color_esquema = 'blue'。我添加了 set color_name 变量来简化条目。使用此语句,您开始声明一个名为 color_name 的变量,并且您只需要在整个查询过程中使用它就声明它。如果您想恢复,您可以插入您的 color_esquema 名称。
SQL FIDDLE DEMO
我首先在 user_interface 的最后一行添加灰色。然后我使用更新查询将值更改为黑色的新颜色模式。将其分解为步骤。
CREATE TABLE color_scheme (
id_color_sheme INT AUTO_INCREMENT PRIMARY KEY,
color_esquema VARCHAR(30),
color_front_banners VARCHAR(7),
color_front_banners_bottom VARCHAR(7),
color_front_botoes VARCHAR(7),
color_front_links VARCHAR(7),
color_front_menu VARCHAR(7),
color_front_rodape VARCHAR(7),
index(color_esquema)
);
CREATE TABLE user_interface (
id INT AUTO_INCREMENT PRIMARY KEY,
color_front_banners VARCHAR(7),
color_front_banners_bottom VARCHAR(7),
color_front_botoes VARCHAR(7),
color_front_links VARCHAR(7),
color_front_menu VARCHAR(7),
color_front_rodape VARCHAR(7)
);
-- SAMPLE DATA
INSERT INTO user_interface (
color_front_banners,
color_front_banners_bottom,
color_front_botoes,
color_front_links,
color_front_menu,
color_front_rodape)
VALUES ('#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF'),
('#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE') ;
INSERT INTO color_scheme (color_esquema,
color_front_banners,
color_front_banners_bottom,
color_front_botoes,
color_front_links,
color_front_menu,
color_front_rodape)
VALUES ('black','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF','#FFFFFF'),
('grey','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE','#EEEEEE') ;
First step
然后与更新相同的数据。顺便提一句。小提琴不允许我这样做 控制板。见顶部的决赛。
Second step
PHP
用于更改配色方案的 PHP 脚本。
<?php
$color_name = 'black';
$host = 'host';
$user = 'user';
$password = 'password';
$database = 'database';
$link = mysqli_connect($host, $user, $password, $database);
IF (!$link)
echo ('Unable to connect to database');
ELSE
$query = "
SET @color_name := '".$color_name."';
UPDATE user_interface
SET
color_front_banners = (
SELECT color_front_banners FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_banners_bottom = (
SELECT color_front_banners_bottom FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_botoes = (
SELECT color_front_botoes FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_links = (
SELECT color_front_links FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_menu = (
SELECT color_front_menu FROM color_scheme
WHERE color_esquema = @color_name ),
color_front_rodape = (
SELECT color_front_rodape FROM color_scheme
WHERE color_esquema = @color_name )
WHERE id = 2;
";
mysqli_query($link, $query);
mysqli_close($link);
?>
**Edit Wordpress udpate **
这只会加载配色方案名称:
<?php
// insert database connection to get the colors from the color scheme
function retrieve_color_scheme()
$host = 'host';
$user = 'user';
$password = 'password';
$database = 'database';
$link = mysqli_connect($host, $user, $password, $database);
IF (!$link)
echo ('Unable to connect to database');
ELSE
$query = "SELECT color_esquema FROM color_scheme";
$result = mysqli_query($link, $query);
$choices = mysql_fetch_array($result);
return $choices;
mysqli_close($link);
$this->add_control( 'color_esquema', array(
'label' => 'Esquema de cores:',
'section' => 'custom_colors',
'type' => 'select',
'priority'=> 9,
'choices' => retrieve_color_scheme()
) );
$this->add_setting( 'color_menu', array(
'default' => '#65696E',
'type' => 'option',
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
'priority' => 10
) );
$this->add_control( new WP_Customize_Color_Control( $this, 'color_menu', array(
'label' => __( 'Fundo do Menu'),
'section' => 'custom_colors',
'settings' => 'color_menu',
'priority' => 10
) ) );
$this->add_setting( 'color_titulo_menu', array(
'default' => '#FFFFFF',
'type' => 'option',
'capability' => 'edit_theme_options',
'transport' => 'postMessage',
'priority' => 15
) );
$this->add_control( new WP_Customize_Color_Control( $this, 'color_titulo_menu', array(
'label' => __( 'Título'),
'section' => 'custom_colors',
'settings' => 'color_titulo_menu',
'priority' => 15
) ) );
?>
<!-- Page -->
<?php $color_menu = get_option('color_menu'); ?>
<?php $color_titulo_menu = get_option('color_titulo_menu');?>
#containerborder-top:82px solid <?php if(empty($color_menu))echo "#65696E"; else echo "$color_menu";; ?>
#logo a spancolor:<?php if(empty($color_titulo_menu))echo "#FFFFFF"; else echo "$color_titulo_menu";; ?>
<!-- My try - In Page -->
【讨论】:
【参考方案2】:您可以为此使用 CASE 语句。这是一个相当简化的版本,但这应该能让您走上正轨。
UPDATE mytable
SET menu_color = CASE WHEN color_scheme = 'Red' THEN '#30618F' WHEN color_scheme = 'Blue' THEN '#FFFFFF' ELSE '' END
【讨论】:
但是我如何让它只更新一次呢?我想先更改配色方案,然后更改其他属性。但在那之后,我希望能够单独更改每个属性,而无需将其重置为 color_scheme 默认值。【参考方案3】:您应该创建一个color_schemes
表并在其中存储每种配色方案的详细信息。
【讨论】:
【参考方案4】:激进的,
我是 Artur 的朋友,昨天我尝试了不同的方法来解决同样的问题,我不知道是不是更容易还是什么...Please take a look at my other question
我们使用的是 Wordpress,我们不擅长编写 PHP,我们可以调整脚本和东西,但我们不擅长创建自己的。
感谢您的努力,我们就快到了!
【讨论】:
当您的主题数量较少时,使用数组的方法很好。您将使用的主题越多,使用 mysql 存储颜色就越容易。如果您发布完整的表单页面,我或许可以为您提供更多帮助。 它认为我需要的页面是customize.php。此页面将包含您选择配色方案或用于指定特定颜色的表单。不确定,但如果您猜测您想在选择不同的配色方案时更改下面的所有颜色。这需要将表单方法设置为对 PHP_SELF 或customize.php 进行发布和操作。此外,您将需要我的 SQL 查询来从数据库中获取颜色并显示它们。 我用一些数组和我们如何在页面上调用它们制作了一个 pastebin,因为它太大而且很多不相关的东西在这里发布所有内容,所以请看一下:pastebin.com/agUuPsnq 这就是定制 CMS 如此困难的原因。您提供的代码只是我需要的一半。我看不到带有提交按钮的表单。无法判断颜色数据是如何进入表单的。在您的文档中找不到使用的控制器类。因此,它们是如何工作的完全是个谜。基本上有两种方法可以解决这个问题。尝试找出 WP 在内部是如何工作的或如何解决 WP。 我已经添加了 WP 标签。也许另一个知道 WP 工作原理的人可以帮助您。祝你好运。以上是关于如果MYSQL中的值被更新,其他值改变的主要内容,如果未能解决你的问题,请参考以下文章