Solved

Concat and insert if not blank

Posted on 2014-01-27
8
552 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
8 Comments
 
LVL 24

Accepted Solution

by:
chaau earned 500 total points
Comment Utility
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
Comment Utility
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 24

Assisted Solution

by:chaau
chaau earned 500 total points
Comment Utility
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
 
LVL 76

Expert Comment

by:arnold
Comment Utility
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
Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

 
LVL 15

Expert Comment

by:Jagadishwor Dulal
Comment Utility
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 108

Expert Comment

by:Ray Paseur
Comment Utility
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
Comment Utility
@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
Comment Utility
Thanks, works fine.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

'Between' is such a common word we rarely think about it but in SQL it has a very specific definition we should be aware of. While most database vendors will have their own unique phrases to describe it (see references at end) the concept in common …
Confronted with some SQL you don't know can be a daunting task. It can be even more daunting if that SQL carries some of the old secret codes used in the Ye Olde query syntax, such as: (+)     as used in Oracle;     *=     =*    as used in Sybase …
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

772 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

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now