From: "Ashley M. Kirchner" on

I may be going at this completely wrong but at the moment I'm
stuck. I have a DB from a client and need to do several searches on
it. This one sentence is important because it's their DB, not mine. So
I can't modify the way the DB was created in the first place, I can only
work with what I have. And, whatever the solution to this might be, it
does NOT have to be strictly MySQL, it can also be a PHP solution (which
is why I'm sending it there as well.) So, having said that, consider
the following table:

+-------+-----+-----+---+
| 00001 | 123 | 0.0 | C |
| 00001 | 234 | 0.1 | D |
| 00001 | 345 | 0.0 | D |
| 00001 | 456 | 0.1 | C |
| 00001 | 567 | 0.1 | G |
| 00002 | 123 | 0.0 | C |
| 00002 | 234 | 0.1 | D |
| 00002 | 345 | 0.0 | D |
| 00003 | 234 | 0.1 | D |
| 00003 | 345 | 0.0 | D |
| 00003 | 123 | 0.0 | C |
| 00003 | 456 | 0.1 | C |
| 00003 | 567 | 0.1 | G |
| 00004 | 123 | 0.0 | C |
| 00004 | 234 | 0.1 | D |
| 00004 | 345 | 0.0 | D |
+-------+-----+-----+---+

mysql> select * from table where id='00001';
+-------+-----+-----+---+
| 00001 | 123 | 0.0 | C |
| 00001 | 234 | 0.1 | D |
| 00001 | 345 | 0.0 | D |
| 00001 | 456 | 0.1 | C |
| 00001 | 567 | 0.1 | G |
+-------+-----+-----+---+

Now, I have to find other IDs that match the above result. In the
table, that would be ID '00003' (and in the entire DB, there may be
others as well - I need to find all those IDs.) But, notice how ID 0003
isn't in the same order as ID 00001, but the data is still the same.

So how do I efficiently search through the DB to find other IDs
that matches the one I need? I can't imagine doing a for loop selecting
each ID and comparing their result to the one I'm starting with. If the
DB contains thousands upon thousands of rows, that might take a very
long time.

Open to suggestions.
From: Michael Dykman on
Not quite sure what the question is.

from:
> mysql> select * from table where id='00001';
> +-------+-----+-----+---+
> | 00001 | 123 | 0.0 | C |
> | 00001 | 234 | 0.1 | D |
> | 00001 | 345 | 0.0 | D |
> | 00001 | 456 | 0.1 | C |
> | 00001 | 567 | 0.1 | G |
> +-------+-----+-----+---+

How do we deduce that you would want ID '00003' ?

This conversation would be easier if we gave names to those columns..

- michael dykman


On Mon, Jul 19, 2010 at 12:36 PM, Ashley M. Kirchner <ashley(a)pcraft.com> wrote:
>
>    I may be going at this completely wrong but at the moment I'm stuck.  I
> have a DB from a client and need to do several searches on it.  This one
> sentence is important because it's their DB, not mine.  So I can't modify
> the way the DB was created in the first place, I can only work with what I
> have.  And, whatever the solution to this might be, it does NOT have to be
> strictly MySQL, it can also be a PHP solution (which is why I'm sending it
> there as well.)  So, having said that, consider the following table:
>
> +-------+-----+-----+---+
> | 00001 | 123 | 0.0 | C |
> | 00001 | 234 | 0.1 | D |
> | 00001 | 345 | 0.0 | D |
> | 00001 | 456 | 0.1 | C |
> | 00001 | 567 | 0.1 | G |
> | 00002 | 123 | 0.0 | C |
> | 00002 | 234 | 0.1 | D |
> | 00002 | 345 | 0.0 | D |
> | 00003 | 234 | 0.1 | D |
> | 00003 | 345 | 0.0 | D |
> | 00003 | 123 | 0.0 | C |
> | 00003 | 456 | 0.1 | C |
> | 00003 | 567 | 0.1 | G |
> | 00004 | 123 | 0.0 | C |
> | 00004 | 234 | 0.1 | D |
> | 00004 | 345 | 0.0 | D |
> +-------+-----+-----+---+
>
> mysql> select * from table where id='00001';
> +-------+-----+-----+---+
> | 00001 | 123 | 0.0 | C |
> | 00001 | 234 | 0.1 | D |
> | 00001 | 345 | 0.0 | D |
> | 00001 | 456 | 0.1 | C |
> | 00001 | 567 | 0.1 | G |
> +-------+-----+-----+---+
>
>    Now, I have to find other IDs that match the above result.  In the table,
> that would be ID '00003' (and in the entire DB, there may be others as well
> - I need to find all those IDs.)  But, notice how ID 0003 isn't in the same
> order as ID 00001, but the data is still the same.
>
>    So how do I efficiently search through the DB to find other IDs that
> matches the one I need?  I can't imagine doing a for loop selecting each ID
> and comparing their result to the one I'm starting with.  If the DB contains
> thousands upon thousands of rows, that might take a very long time.
>
>    Open to suggestions.
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?unsub=mdykman(a)gmail...com
>
>



--
 - michael dykman
 - mdykman(a)gmail.com

 May the Source be with you.
From: "Ashley M. Kirchner" on
On 7/19/2010 10:48 AM, Michael Dykman wrote:
> Not quite sure what the question is.
>
> from:
>
>> mysql> select * from table where id='00001';
>> +-------+-----+-----+---+
>> | 00001 | 123 | 0.0 | C |
>> | 00001 | 234 | 0.1 | D |
>> | 00001 | 345 | 0.0 | D |
>> | 00001 | 456 | 0.1 | C |
>> | 00001 | 567 | 0.1 | G |
>> +-------+-----+-----+---+
>>
> How do we deduce that you would want ID '00003' ?
>
> This conversation would be easier if we gave names to those columns..
>

I didn't think it mattered, but the ID that I'm starting with (in
this case '00001') is the user id currently searching the DB. Basically
I take the user id and collect the initial data set I need to compare
against.

As for names on the columns, ok:

+-------+-----+-----+---+
| uid | set | dec | l |
+-------+-----+-----+---+
| 00001 | 123 | 0.0 | C |
| 00001 | 234 | 0.1 | D |
| 00001 | 345 | 0.0 | D |
| 00001 | 456 | 0.1 | C |
| 00001 | 567 | 0.1 | G |
+-------+-----+-----+---+



From: Simcha Younger on
On Mon, 19 Jul 2010 10:36:40 -0600
"Ashley M. Kirchner" <ashley(a)pcraft.com> wrote:


> mysql> select * from table where id='00001';
> +-------+-----+-----+---+
> | 00001 | 123 | 0.0 | C |
> | 00001 | 234 | 0.1 | D |
> | 00001 | 345 | 0.0 | D |
> | 00001 | 456 | 0.1 | C |
> | 00001 | 567 | 0.1 | G |
> +-------+-----+-----+---+
>
> Now, I have to find other IDs that match the above result. In the
> table, that would be ID '00003' (and in the entire DB, there may be
> others as well - I need to find all those IDs.) But, notice how ID 0003
> isn't in the same order as ID 00001, but the data is still the same.
>
select distinct id from `table` where concat(`b`, `c`, `d`) in (select concat(`b`,`c`,`d` from `table` where id = '0001') AND id != '0001';
(untested)

--
Simcha Younger <simcha(a)syounger.com>