Solved

Concat and insert if not blank

Posted on 2014-01-27
8
563 Views
Last Modified: 2014-01-28
I have the following which works fine

INSERT INTO product_images (product_image_name,sku)
select concat_ws(';',image1,image2,image3),item from import
ON DUPLICATE KEY UPDATE product_image_name=concat_ws(';',image1,image2,image3)

But I want to add some conditions:
If either image1,image2 or image3 is blank (will be blank and not NULL) then don't include that particular field.
If all fields are blank then skip

Is it possible? Would this make the sql very complicated? I can live with inserting 'blank' fields (as I will just do a delete on them) but would really like the empty fields to be skipped.
0
Comment
Question by:Gary
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 25

Accepted Solution

by:
chaau earned 500 total points
ID: 39813951
yes, it is possible. Use NULLIF() function to convert empty columns to NULLs, that will in turn be skipped by concat_ws. Also, add an additional condition to your select statement to skip all NULL values:
INSERT INTO product_images (product_image_name,sku)
select concat_ws(';',NULLIF(image1,''),NULLIF(image2,''),NULLIF(image3,'')),item 
from import WHERE NULLIF(image1,'') IS NOT NULL AND 
NULLIF(image2,'') IS NOT NULL AND
NULLIF(image3,'') IS NOT NULL
ON DUPLICATE KEY UPDATE product_image_name=concat_ws(';',NULLIF(image1,''),NULLIF(image2,''),NULLIF(image3,''))

Open in new window

0
 
LVL 58

Author Comment

by:Gary
ID: 39813961
That kinda works but it isn't pulling rows where for example image1 does have a value but image2 and image3 don't.
Presumably because you are conditioning that all cols must have a value
from import WHERE NULLIF(image1,'') IS NOT NULL AND
NULLIF(image2,'') IS NOT NULL AND
NULLIF(image3,'') IS NOT NULL


...where I just want skip the fields if they are blank.
I can live with it and do a delete on the blank fields by removing the WHERE condition unless you have a better solution.
0
 
LVL 25

Assisted Solution

by:chaau
chaau earned 500 total points
ID: 39813987
You are right. My mistake. Change the where clause to this:
where not (NULLIF(image1,'') IS NULL AND 
NULLIF(image2,'') IS NULL AND
NULLIF(image3,'') IS NULL)

Open in new window

0
Webinar: MongoDB® Index Types

Join Percona’s Senior Technical Services Engineer, Adamo Tonete as he presents “MongoDB Index Types, How, When and Where Should They be Used?” on Wednesday, July 12, 2017 at 11:00 am PDT / 2:00 pm EDT (UTC-7).

 
LVL 78

Expert Comment

by:arnold
ID: 39814018
I am unclear what it is you are looking to do.
I think it will be more efficient to leave it as you have it.
image1;image2;image3;

if you make the concat conditional (other than complicating the query) you could have results
;;;
image1;;image3
versus
image1;image3
image3
image2;image3

Presumably there is a significance placed on that order when you decode/split the data from the column based on ';'
0
 
LVL 15

Expert Comment

by:Jagadishwor Dulal
ID: 39814035
I think you are almost at the point write a function to check the condition and change your query as per required. And again if you want to having blank then use default value to blank in your database.
0
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 39814846
Not sure of the overall design, but it feels to me like the product_image_name should be a separate table rather than a variable number of image names in a single column.  Just a thought... ~Ray
0
 
LVL 58

Author Comment

by:Gary
ID: 39815495
@chaau
The amendment seems to work fine, will just do a bit more testing to make sure nothing is missing.
0
 
LVL 58

Author Comment

by:Gary
ID: 39815990
Thanks, works fine.
0

Featured Post

Migrating Your Company's PCs

To keep pace with competitors, businesses must keep employees productive, and that means providing them with the latest technology. This document provides the tips and tricks you need to help you migrate an outdated PC fleet to new desktops, laptops, and tablets.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article discusses four methods for overlaying images in a container on a web page
This post looks at MongoDB and MySQL, and covers high-level MongoDB strengths, weaknesses, features, and uses from the perspective of an SQL user.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question