我试图在MYSQL属性的值发生变化时,其他属性的其他值也会发生变化。
例如:
我的color_scheme属性值为“RED”。 如果color_scheme值更改为“BLUE”,则值为:
menu_color changes to #30618F
font_color changes to #FFFFFF
footer_color changes to #1A92CA
有可能吗?
它必须只更新一次值,因为用户必须能够分别更改特定的属性(如menu_color,font_color,footer_color)。
就像这样:
答案 0 :(得分:2)
试试这个:
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表(或colors表)中的值。最基本的方法是像我一样做子查询然后说WHERE color_esquema ='blue'。我添加了set color_name变量来简化条目。使用此语句,您开始声明一个名为color_name的变量,只需在整个查询中使用它就可以声明它。如果要还原,可以插入color_esquema名称。
我首先将灰色添加到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') ;
然后与更新相同的数据。 B.T.W.小提琴不允许我这样做 面板。查看顶部的final。
<强> 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');?>
#container{border-top:82px solid <?php if(empty($color_menu)){echo "#65696E";} else { echo "$color_menu";}; ?>}
#logo a span{color:<?php if(empty($color_titulo_menu)){echo "#FFFFFF";} else { echo "$color_titulo_menu";}; ?>}
<!-- My try - In Page -->
答案 1 :(得分:0)
您可以使用CASE语句。这是一个非常简化的版本,但这可以让你走上正确的轨道。
UPDATE mytable
SET menu_color = CASE WHEN color_scheme = 'Red' THEN '#30618F' WHEN color_scheme = 'Blue' THEN '#FFFFFF' ELSE '' END
答案 2 :(得分:0)
您应该制作一个color_schemes
表并存储每个配色方案的详细信息。
答案 3 :(得分:0)
自由基,
我是Artur的朋友,昨天我为同样的问题尝试了不同的方法,我不知道它是否更容易或者是什么...... Please take a look at my other question
我们正在使用Wordpress,我们不擅长编写PHP,我们可以调整脚本和内容,但我们并不擅长创建自己的。
感谢您的努力,我们快到了!