Solved

Trigger in My SQL

Posted on 2014-11-19
4
166 Views
Last Modified: 2014-12-05
I have a website where the Users enter the product information by Single entry or through the batch upload of CSV file. In both cases the records get inserted to the same table which is in My SQL database.
The information is then retrieved and shown in the website too.  There is a product id column which has 20 characters. But when we are displaying it in the website we show only the first 10 records. As the next 10 are critical and is not displayed. Though the product ID is a unique column the first 10 characters are not unique. So I will be attaching product id +0001 when the information is displayed outside. So I prefer to insert a column in the existing table. The column will get update with product id +0001 on the first entry. Whenever there is a duplicate record gets inserted in the product id by matching the first 10 characters the sequence should be predicted +0002.
So I need a trigger and sequence code in mysql for this. Please help.
0
Comment
Question by:karthik80c
  • 2
4 Comments
 
LVL 33

Expert Comment

by:ste5an
ID: 40452295
Please rephrase your question. Post a concise and complete example. Include sample data..
0
 
LVL 7

Expert Comment

by:Phil Davidson
ID: 40463819
Is the product ID numeric or alphanumeric?  You want a trigger to fire on an insert to the table or an update to the table or both events?  When you say "attaching +0001," do you mean to append to the value of product ID four characters of "0001"?  I want to make sure you aren't talking about prepending it or mathematically adding the value of 0001 to the ID.

This gives information about creating triggers:

http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
0
 

Author Comment

by:karthik80c
ID: 40467277
Dear Phil
The product ID is alphanumeric.
The situation is like this

Product : Apple
Product ID : UID903456790090

Product : Orange
Product ID :UID903456790093

These two products have the first 10 character same.
I am displaying only the first 10 to the customer for some reason.
When I am displaying it if the customer calls in and says the product ID he will be able to say only the first 10
So my search string on the database will retrieve two records.
So am planning to attach a sequence to the product ID with 0001 for the first record and any duplicate product ID for the first 10 character will have it 0002. I will be creating a separate column for this sequence and while displaying it in the website I will be attaching them.
0
 
LVL 7

Accepted Solution

by:
Phil Davidson earned 500 total points
ID: 40468138
There will be a third column have the 0001 and 0002 etc. values.  I don't think you want the trigger to fire on insert but not update.

Let's assume your table is called coolTable and the column for the 0001 and 0002 values is called appendVal.

create trigger coolEE AFTER INSERT on coolTable
for each row
SET new.appendVal = 
select LPAD('(select max(appendVal) from coolTable 
where new.ProductID = ProductID) + 1)', 4, '000')

Open in new window



Notes:
LPAD is a function based on the concept of "left padding" a numeric value with 0s.  This way you get the desired leading zeroes.

There is a max function which is an aggregate function.  This can be a problem with performance if you have a high workload on your database server.  Lots of triggers can degrade performance too.  So this is ok for a smaller environment.  But this wouldn't work for a high volume OLTP database.

ANSI_NULLS need to be set to off because the trigger relies on nulls participating in the arithmetic as zeroes.  Upon not finding an appendVal associated with the productID (e.g., the first insertion of a row with such a productID), the max function will return a null.  

I believe this satisfies what you want.  How do you like this response?
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

Creating and Managing Databases with phpMyAdmin in cPanel.
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

777 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