Re: Add New Records Only!

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If the table is "small", you could maybe do:

delete from foo where id in (select b.id from foo as a, foo as b where
a.id < b.id and a.field1 = b.field1 and a.field2 = b.field2 and ...)

Another option would be to just create a UNIQUE INDEX on the fields
you think "should" be unique, and then your second insert is gonna
fail, and you can just ignore that.

On Fri, March 23, 2007 11:51 am, Satyam wrote:
> Delete from table where id = (select min(id) from table group by
> field1,
> field2 ,...  having count(id) > 1)
>
> Id is the unique primary key, fieldn are the fields that can be
> duplicated.
> Each time this runs it will remove one occurence of the all duplicated
> records.  You'd have to run it several times until it deletes no more
> records.   In MySql, you cannot have the same table in the 'delete'
> and in
> the subquery, thus, you will have to first insert the id's in an
> auxiliary
> table and then delete the records.
>
> Satyam
>
> ----- Original Message -----
> From: "Rahul Sitaram Johari" <sleepwalker@xxxxxxxxxxxxxxxx>
> To: "Mark" <markw@xxxxxxxxxxxxxx>; "PHP" <php-general@xxxxxxxxxxxxx>
> Sent: Friday, March 23, 2007 5:24 PM
> Subject: Re:  Add New Records Only!
>
>
>>
>> Ave,
>>
>> "Three: Insert everything and remove duplicates later."
>>
>> Out of the suggested options, this option is sounding the most sane
>> attainable on my end. I don't have a complete grip on how to
>> accomplish
>> this, but certainly sounds feasible. Let me look at ways to achieve
>> this.
>>
>> Thanks!
>>
>> On 3/23/07 11:36 AM, "Mark" <markw@xxxxxxxxxxxxxx> wrote:
>>
>>> Rahul Sitaram Johari wrote:
>>>
>>> As far as I can see, there is probably only three ways to do this:
>>>
>>> One: Make sure your dbase system contains unique primary key
>>> capability,
>>> and
>>> use it to avoid duplicates.
>>> Two: query for the row, if it isn't there insert it. (You'll have
>>> to deal
>>> with concurrency with locking or something)
>>> Three: Insert everything and remove duplicates later.
>>>
>>>> Ave,
>>>>
>>>> Let me explain what I¹m trying to do. Unfortunately it¹s not a
>>>> very
>>>> simple
>>>> Add/Update transaction.
>>>> Basically I gather records from multiple mySQL tables and add them
>>>> to a
>>>> DBF
>>>> (dbase) database.  I wrote a code which was able to accomplish
>>>> this
>>>> without any problems and the add_records goes very smooth.
>>>>
>>>> However, I have to modify this program now so that only ³New²
>>>> records,
>>>> i.e., records that have not yet been transferred, are added into
>>>> the
>>>> DBF.
>>>> In other words, any records that are being added, which already
>>>> exist in
>>>> the DBF, should not be added.
>>>>
>>>> If it were just adding records from one mySQL to another mySQL, I
>>>> could
>>>> easily use INSERT IGNORE or the Unique Key fundamental ­ however,
>>>> since
>>>> I¹m adding from multiple mySQL tables into DBF, I¹m not sure how
>>>> to go
>>>> about doing this.
>>>>
>>>> Here¹s my code that takes records from multiple mySQL tables and
>>>> adds
>>>> them
>>>> to a DBF.
>>>>
>>>> // define the array with mySQL Table Names & Identifier
>>>>     $tChoice = array(
>>>>        "lodispo" => "VB",
>>>>        "lodispo_osma" => "ATL",
>>>>        "lodispo_osmh" => "HOU",
>>>>        "lodispo_osmn" => "NSV",
>>>>        "lodispo_osmp" => "PAA",
>>>>        "lodispo_osmj" => "JAX",
>>>>        "lodispo_osmt" => "TPA",
>>>>        "lodispo_dmam" => "MET",
>>>>        "lodispo_osmf" => "FTM",
>>>>        "lodispo_hfglend" => "GLEND",
>>>>           "lodispo_hfmesa" => "MESA",
>>>>           "lodispo_hfphenx" => "PHENX",
>>>>     );
>>>>
>>>>
>>>>     // open DBF in read-write mode
>>>>     $db2 = dbase_open($theDBFfile, 2);
>>>>     if (!$db2) {
>>>>       echo "<BR><BR><STRONG>Fatal Error:</STRONG> Unable to open
>>>> database<BR><BR>";
>>>>       exit;
>>>>     }
>>>>
>>>>     else {
>>>>
>>>>             // Let's Run Array Loops!
>>>>             foreach ($tChoice as $tblQ => $bxQ) {
>>>>
>>>>             // connect to mySQL tables one by one
>>>>             mysql_select_db($database_imslead_transfer,
>>>>             $imslead_transfer); $query_loDispo = "SELECT * FROM
>>>> $tblQ";
>>>>             $loDispo = mysql_query($query_loDispo,
>>>> $imslead_transfer) or
>>>> die(mysql_error());
>>>>             $row_loDispo = mysql_fetch_assoc($loDispo);
>>>>             $totalRows_loDispo = mysql_num_rows($loDispo);
>>>>
>>>>             // write mySql data to Dbf
>>>>             do {
>>>>                  dbase_add_record($db2, array(
>>>>                      $row_loDispo['phone'],
>>>>                      $row_loDispo['comments'],
>>>>                      $row_loDispo['starttime'],
>>>>                      $row_loDispo['endtime'],
>>>>                      $row_loDispo['dispo'],
>>>>                      $row_loDispo['loanofficer'],
>>>>                      $row_loDispo['verifier'],
>>>>                      $bxQ));
>>>>                  } while ($row_loDispo =
>>>> mysql_fetch_assoc($loDispo));
>>>>             }
>>>>
>>>>     dbase_close($db2);
>>>>     }
>>>>
>>>> Any suggestions would be highly appreciated.
>>>>
>>>> Thanks,
>>>>
>>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>> Rahul Sitaram Johari
>>>> CEO, Twenty Four Seventy Nine Inc.
>>>>
>>>> W: http://www.rahulsjohari.com
>>>> E: sleepwalker@xxxxxxxxxxxxxxxx
>>>>
>>>> ³I morti non sono piu soli ... The dead are no longer lonely²
>>
>> --
>> PHP General Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>>
>>
>>
>> --
>> No virus found in this incoming message.
>> Checked by AVG Free Edition.
>> Version: 7.5.446 / Virus Database: 268.18.17/730 - Release Date:
>> 22/03/2007 7:44
>>
>>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>


-- 
Some people have a "gift" link here.
Know what I want?
I want you to buy a CD from some indie artist.
http://cdbaby.com/browse/from/lynch
Yeah, I get a buck. So?

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux