RE: Script to retrieve data

"Bonnett, John" <[email protected]> Wed, 1 Nov 2006 08:10:06 +1030
Newsgroups gmane.comp.db.mysql.windows
Message-ID <[email protected]>
Rather than thinking about "jumping to the next product", think in terms
of just copying the details of each product if it is not null. Something
like this should work fine: -

CREATE TABLE `invoice_detail` (
  `InvoiceNo` int(8) unsigned NOT NULL default '0',
  
  `ProductID` varchar(31) default NULL,
  `Quantity` float unsigned default '0',
  `UnitPrice` decimal(10,2) default '0.00',
  `Piece` varchar(15) default NULL,

  KEY (`InvoiceNo`)
) TYPE=MyISAM;

INSERT INTO `invoice_detail`
SELECT InvoiceNo, ProductID01, Quantity01, UnitPrice01, Piece01
FROM invoice
WHERE ProductID01 IS NOT NULL;

INSERT INTO `invoice_detail`
SELECT InvoiceNo, ProductID02, Quantity02, UnitPrice02, Piece02
FROM invoice
WHERE ProductID02 IS NOT NULL; 

INSERT INTO `invoice_detail`
SELECT InvoiceNo, ProductID03, Quantity03, UnitPrice03, Piece03
FROM invoice
WHERE ProductID03 IS NOT NULL;

InvoiceNo will no longer be a primary key in this new table, you might
want to add one, either an extra autonumber field or perhaps concatenate
InvoiceNo and ProductID.

Hope this helps.

John Bonnett

-----Original Message-----
From: ascll [mailto:[email protected]] 
Sent: Tuesday, 31 October 2006 11:06 PM
To: [email protected]
Subject: Script to retrieve data

Hi,

Due to the previous poor database design, now I having trouble to create
a "master-detail" relationship for existing table with many records. The
worst case is I do NOT allow to change table structure because some
customised applications are based on exisiting structures.

My job is to develop a small application to work together with their
exisiting applications. Therefore, I need to extract data from 1 of
their existing table to my own new table for my own processing.


EXISTING TABLE
==============

CREATE TABLE `invoice` (
  `InvoiceNo` int(8) unsigned NOT NULL default '0',

  `ProductID01` varchar(31) default NULL,
  `Quantity01` float unsigned default '0',
  `UnitPrice01` decimal(10,2) default '0.00',
  `Piece01` varchar(15) default NULL,

  `ProductID02` varchar(31) default NULL,
  `Quantity02` float unsigned default '0',
  `UnitPrice02` decimal(10,2) default '0.00',
  `Piece02` varchar(15) default NULL,

  `ProductID03` varchar(31) default NULL,
  `Quantity03` float unsigned default '0',
  `UnitPrice03` decimal(10,2) default '0.00',
  `Piece03` varchar(15) default NULL,

  PRIMARY KEY (`InvoiceNo`)
) TYPE=MyISAM


NEW TABLE
=========
CREATE TABLE `invoice_detail` (
  `InvoiceNo` int(8) unsigned NOT NULL default '0',
  
  `ProductID` varchar(31) default NULL,
  `Quantity` float unsigned default '0',
  `UnitPrice` decimal(10,2) default '0.00',
  `Piece` varchar(15) default NULL,

  KEY (`InvoiceNo`)
) TYPE=MyISAM

My question is, how to I extract all record from "invoice" to my
"invoice_detail" in master-detail manner if: -

 - for each InvoiceNo, if ProductID01 is NOT null, I will copy
ProductID01, Quantity01, UnitPrice01 and
Piece01 to "invoice_detail" and then jump to ProductID02, else, not copy
and jump to next InvoiceNo
 
 - if ProductID02 is NOT null, I will copy ProductID02, Quantity02,
UnitPrice02 and Piece02 to "invoice_detail" and then jump to
ProductID03, else, not copy and jump to next InvoiceNo
 
 - if ProductID03 is NOT null, I will copy ProductID03, Quantity03,
UnitPrice03 and Piece03 to "invoice_detail", else, not copy and jump to
next InvoiceNo


Could someone show me the script in order for me to "migrate" the data
from "invoice" to my "invoice_detail"?

Thanks in advance and I'm using MySQL ver 4.0.2X.


=====
ascll


 
________________________________________________________________________
____________
Low, Low, Low Rates! Check out Yahoo! Messenger's cheap PC-to-Phone call
rates
(http://voice.yahoo.com)



-- 
MySQL Windows Mailing List
For list archives: http://lists.mysql.com/win32
To unsubscribe:    http://lists.mysql.com/[email protected]