php-windows Digest 10 May 2010 18:45:31 -0000 Issue 3806

Topics (messages 30079 through 30083):

Re: Appending one MySQL file to another without duplicates.
        30079 by: Ferenc Kovacs
        30080 by: Niel Archer
        30081 by: Ferenc Kovacs

Will look into the suggestions tonight
        30082 by: Bill Mudry

older windows binaries
        30083 by: Tomasz Krawczyk

Administrivia:

To subscribe to the digest, e-mail:
        [email protected]

To unsubscribe from the digest, e-mail:
        [email protected]

To post to the list, e-mail:
        [email protected]


----------------------------------------------------------------------
--- Begin Message ---
On Mon, May 10, 2010 at 7:03 AM, Bill Mudry <[email protected]> wrote:

> I have seen many examples of just getting rid of duplicate records all in
> the same file.
>
> However, I need to know how to append one MySQL table into another table
> without
> adding duplicate records into the original file accepting the data.
>
> I ran the following script that successfully appended data from what I
> called the "tervuren_target"
> table into the file that drives the species level of my botanical wood
> tree, named
> "species_master".
>
> ..................................................................................................................................................................................
> INSERT INTO species_master (genera, name, species_name, authorities,
> species_source)
>
> SELECT genera, name, species_name, authorities, species_source FROM
> 'tervuren_target'
>
> WHERE tervuren_target.species_name != species_master.species_name;
>
> ..................................................................................................................................................................................
>
> The last line was an attempt to avoid carrying over duplicates from the
> Tervuren file into the species file
> but an error said that it did not recognize species_master.species_name.


You didn't used the species_master table in you select query, hence the
mysql couldn't understand it.


> So, I tried putting single
> quotes as 'species_master.species_name'. The program now ran without errors
> and appended records
> for a total of 17,685 combined records.
>

If you put it into quotes, the it will used as a string, not a reference to
a field.
Please correct me if I'm wrong:
You have this tervuren_target and you have to copy every record which
doesn't exists in the species_master

INSERT INTO species_master (genera, name, species_name, authorities,
species_source)

SELECT DISTINCT genera, name, species_name, authorities, species_source FROM
'tervuren_target'
LEFT JOIN species_master
ON
tervuren_target.species_name = species_master.species_name
WHERE species_master.species_name IS NULL

Basically: we select all of the records from tervuren_target, link with each
record from tervuren_target to species_master through the species_name, we
select only the records, where this link is not exists
(species_master.species_name IS NULL, so we don't have records with this
species_name), to be sure, I added a DISTINCT.
Maybe you have to tweak the query a littbe bit, because mysql is a little
bit tricky, it doesnt allow by default to insert into a row, which is used
in  the same statement as source, but with table alias you can workaround
that, or you can use a third table.

Tyrael

--- End Message ---
--- Begin Message ---
Hi

As this is not a PHP question and in particular not Windows' related
PHP question, I'll keep my reply brief.

If you had a unique index defined, duplicates wouldn't be allowed. Then
you would only have to add IGNORE to the INSERT to prevent warnings
being generated.
http://dev.mysql.com/doc/refman/5.1/en/insert.html

If that is not possible, then a join query to identify the non-duplicate
rows.
http://dev.mysql.com/doc/refman/5.1/en/join.html

> I have seen many examples of just getting rid of duplicate records 
> all in the same file.
> 
> However, I need to know how to append one MySQL table into another 
> table without
> adding duplicate records into the original file accepting the data.
> 
> I ran the following script that successfully appended data from what 
> I called the "tervuren_target"
> table into the file that drives the species level of my botanical 
> wood tree, named
> "species_master".
> ..................................................................................................................................................................................
> INSERT INTO species_master (genera, name, species_name, authorities, 
> species_source)
> 
> SELECT genera, name, species_name, authorities, species_source FROM 
> 'tervuren_target'
> 
> WHERE tervuren_target.species_name != species_master.species_name;
> ..................................................................................................................................................................................
> 
> The last line was an attempt to avoid carrying over duplicates from 
> the Tervuren file into the species file
> but an error said that it did not recognize 
> species_master.species_name. So, I tried putting single
> quotes as 'species_master.species_name'. The program now ran without 
> errors and appended records
> for a total of 17,685 combined records.
> 
> However, it did not take long to realize that what it had done is 
> interpret 'species_master.species_name' as
> a string, not a column! Since none of Tervuren records would have 
> that string in them, it let all the records to append
> including (sigh ...) 3,431 duplicate records!
> 
> To clean this up, I realize that if I just use a simple statement 
> with DISTINCT in it, duplicate records from the original
> (and precious) records could get erased instead of the duplicate 
> record that was appended in from the Tervuren data.
> That would be a really bad disaster! I will see what ideas you all 
> have but I am thinking it might be much safer to do
> the append operation over again with a better script that will stop 
> duplicates from carrying over to the species_master
> file in the first case instead of trying to clean up the merged file. 
> (... After all, that was what I was trying to do anyway).
> 
> On structures, here are some facts you will wish to have:
> 
>          - I first made sure that the size, collation, engine and 
> field names used (as shown above) were identical in both the
>            tervuren_target table (the source of data to append) and 
> the species_master table.
> 
>          - None of the data in the species_master file should ever be 
> erased by this append of new data.
> 
>          - The species_master table has many more fields as the 
> tervuren_target table but any field for the tervuren_target
>             data being transferred has exact matching fields in the 
> species_master table. They are under the same folder.
> 
>          - The comparison of which records is new is by using the 
> species_name field as comparison keys in both. If they are
>             identical in both tables for each new record being 
> appended, that record should not be allowed in, thereby not allowing
>             duplicate wood names in. (The meaning of duplicate in 
> this situation is therefore NOT meant from within a table but
>            across tables.)
> 
> I have no idea if there is a way to use 'Distinct" across tables. How 
> is my best way to merge in new data from the one file
> to expand the records in a master file without letting duplicate data in?
> 
> Once the append without duplicates works properly, I then copy it 
> over as table 'species' which is used as the main source
> of data in the species level of the botanical tree. 
> (http://www.prowebcanada.com/taxa).  Expanding the number of woods I can
> find and report was the original top level reason for starting this project.
> 
> Conversationally:
> Once this works for me, it will better than doubled the number of 
> existing wood species I can report. That will be most impressive 
> progress for the wood knowledge base I am building. Once I have a 
> general algorithm working, I have many other lists from which I may 
> also be able extract valued new data --- far faster than I have been 
> able to before.
> 
> I got kind of close but not quite there. I look forward to your help. 
> This should be relatively basic to most intermediate and
> advanced programmers :-) . I am still a junior programmer in PHP and 
> MySQL but more things are starting to work for me ;-) .
> 
> 
> With thanks any and all help in advance,
> 
> Bill Mudry
> Mississauga, Ontario
> 

--
Niel Archer



--- End Message ---
--- Begin Message ---
On Mon, May 10, 2010 at 8:03 AM, Niel Archer <[email protected]> wrote:

> Hi
>
> As this is not a PHP question and in particular not Windows' related
> PHP question, I'll keep my reply brief.
>
> If you had a unique index defined, duplicates wouldn't be allowed. Then
> you would only have to add IGNORE to the INSERT to prevent warnings
> being generated.
> http://dev.mysql.com/doc/refman/5.1/en/insert.html
>
>
I would suggest INSERT ... ON DUPLICATE UPDATE field = field instead of
IGNORE(because IGNORE can suppress other errors), but you are right about
that the unique constraint.

Tyrael

--- End Message ---
--- Begin Message --- Thanks for your suggestions, Tyrael and Neil. I have to work during business hours but I will
look forward to trying out your approach to my appending need later tonight.

Bill Mudry
MIssissauga.

--- End Message ---
--- Begin Message ---
Hi!

Where could I find older versions of PHP binaries?

The page http://windows.php.net/download/ contains 5.3.2 and 5.2.13 binaries. The Page http://www.php.net/releases/ does not contain 5.3.1, 5.3.0 binaries but only sources. Binaries of older versions of 5.2 branch are still available on http://www.php.net/releases/ page.

I need official binaries without installer. VC6 and VC9 if it is possible. Does anyone can help me?

--
regards
Tomek

--- End Message ---

Reply via email to