Hi,

Same bug with MySQL-4.0.2 latest source.

Regards,
  Jocelyn Fournier
----- Original Message -----
From: "Benjamin Pflugmann" <[EMAIL PROTECTED]>
To: "Alexander Keremidarski" <[EMAIL PROTECTED]>
Cc: "Terra" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]>;
<[EMAIL PROTECTED]>
Sent: Thursday, May 16, 2002 7:49 PM
Subject: Re: [BUG] CONCAT_WS + GROUP BY display problem


> Hello.
>
> On Thu, May 16, 2002 at 06:25:42PM +0300, [EMAIL PROTECTED] wrote:
> [...]
> > >mysql> select *,concat_ws('.',oct1,oct2,oct3,oct4)
> > >ip,concat(oct1,'.',oct2,'.',oct3,'.',oct4) test,count(*) c from ips
group
> > >by oct1,oct2,oct3,oct4 having c>1;
> >
>+------+------+------+------+------+-----+-------+--------------+----------
------+---+
> > >| ID   | OCT1 | OCT2 | OCT3 | OCT4 | SID | AVAIL | ip           | test
> > >| c |
> >
>+------+------+------+------+------+-----+-------+--------------+----------
------+---+
> > >| 3424 |   63 |  151 |  144 |   84 |   0 |     1 | 63.151.144.8 |
> > >63.151.144.84  | 2 |
> > >| 3425 |   63 |  151 |  144 |   85 |   0 |     1 | 63.151.144.8 |
> > >63.151.144.85  | 2 |
> > >| 3426 |   63 |  151 |  144 |   86 |   0 |     1 | 63.151.144.8 |
> > >63.151.144.86  | 2 |
> > >| 3427 |   63 |  151 |  144 |   87 |   0 |     1 | 63.151.144.8 |
> > >63.151.144.87  | 2 |
> > >Notice the difference between the result columns of 'ip' and 'test'...
> >
> > It is normal to have a difference there. It is not beacuse of how
concat()
> > and() concat_ws() work, but how GROUP BY works.
>
> That was also my first tought, but I beg to differ: As oct1,...oct4
> are used to construct either column, the result should be the
> same.
>
> I.e. the grouping behaviour you refer to (if I understand you
> correctly) tells us, that we cannot know the row which will be chosen
> for the columns not listed in the GROUP BY clause.
>
> Okay, more precisely, the value for a column is defined to be an
> abitrary value of the group in the manual, IIRC. But MySQLs
> implemenation will use the values of one (abitrary) row for all the
> columns, i.e.
>
>   CONCAT_WS('.',oct1,oct2,oct3,oct4) AS IP
>
> and
>
>   CONCAT(oct1,'.',oct2,'.',oct3,'.',oct4) AS test
>
> will come from the same row and therefore should have been constructed
> using the same values for oct1,...,oct4.
>
> > In order to get predictable result you need to use:
> >
> > select concat_ws('.',oct1,oct2,oct3,oct4) as IP, count(*) as c from
> > ips group by IP [having c > 1];
>
> I have tested this and it doesn't fix the problem.
>
> What follows is a complete test case and the output from running it on
> my system. Please note, that it has the additional (but not necessary)
> property that each group contains only one row, so there can not be
> any ambiguity which values will be used.
>
> SELECT VERSION();
> DROP TABLE IF EXISTS group_by_bug;
> CREATE TABLE group_by_bug ( number INT NOT NULL, alpha CHAR(6) NOT NULL );
> INSERT INTO group_by_bug VALUES (1413006,'idlfmv'),
> (1413065,'smpsfz'),(1413127,'sljrhx'),(1413304,'qerfnd');
>
> /* like the original exmaple */
> SELECT number, alpha, CONCAT_WS('<---->',number,alpha) AS new
> FROM group_by_bug GROUP BY number;
>
> /* with suggested, non-working fix */
> SELECT CONCAT_WS('<---->',number,alpha) AS new
> FROM group_by_bug GROUP BY new LIMIT 1;
>
> /* show depency on seperator length */
> SELECT number, alpha, CONCAT_WS('<->',number,alpha) AS new
> FROM group_by_bug GROUP BY new LIMIT 1;
>
> /* show depency on seperator, second take */
> SELECT number, alpha,
CONCAT_WS('-',number,alpha,alpha,alpha,alpha,alpha,alpha,alpha) AS new
> FROM group_by_bug GROUP BY new LIMIT 1;
>
> /* show that it even cuts the seperator */
> SELECT number, alpha, CONCAT_WS('<------------------>',number,alpha) AS
new
> FROM group_by_bug GROUP BY new LIMIT 1;
>
> ----------------------------------------------------------------------
>
> mysql> SELECT VERSION();
> +-------------+
> | VERSION()   |
> +-------------+
> | 3.23.46-log |
> +-------------+
> 1 row in set (0.00 sec)
>
> mysql> DROP TABLE IF EXISTS group_by_bug;
> Query OK, 0 rows affected (0.00 sec)
>
> mysql> CREATE TABLE group_by_bug ( number INT NOT NULL, alpha CHAR(6) NOT
NULL );
> Query OK, 0 rows affected (0.00 sec)
>
> mysql> INSERT INTO group_by_bug VALUES (1413006,'idlfmv'),
>     -> (1413065,'smpsfz'),(1413127,'sljrhx'),(1413304,'qerfnd');
> Query OK, 4 rows affected (0.00 sec)
> Records: 4  Duplicates: 0  Warnings: 0
>
> mysql>
> mysql> /* like the original exmaple */
>     -> SELECT number, alpha, CONCAT_WS('<---->',number,alpha) AS new
>     -> FROM group_by_bug GROUP BY number;
> +---------+--------+-------------------+
> | number  | alpha  | new               |
> +---------+--------+-------------------+
> | 1413006 | idlfmv | 1413006<---->idlf |
> | 1413065 | smpsfz | 1413065<---->smps |
> | 1413127 | sljrhx | 1413127<---->sljr |
> | 1413304 | qerfnd | 1413304<---->qerf |
> +---------+--------+-------------------+
> 4 rows in set (0.00 sec)
>
> mysql>
> mysql> /* with suggested, non-working fix */
>     -> SELECT CONCAT_WS('<---->',number,alpha) AS new
>     -> FROM group_by_bug GROUP BY new LIMIT 1;
> +-------------------+
> | new               |
> +-------------------+
> | 1413006<---->idlf |
> +-------------------+
> 1 row in set (0.01 sec)
>
> mysql>
> mysql> /* show depency on seperator length */
>     -> SELECT number, alpha, CONCAT_WS('<->',number,alpha) AS new
>     -> FROM group_by_bug GROUP BY new LIMIT 1;
> +---------+--------+------------------+
> | number  | alpha  | new              |
> +---------+--------+------------------+
> | 1413006 | idlfmv | 1413006<->idlfmv |
> +---------+--------+------------------+
> 1 row in set (0.00 sec)
>
> mysql>
> mysql> /* show depency on seperator, second take */
>     -> SELECT number, alpha,
CONCAT_WS('-',number,alpha,alpha,alpha,alpha,alpha,alpha,alpha) AS new
>     -> FROM group_by_bug GROUP BY new LIMIT 1;
>
+---------+--------+-------------------------------------------------------+
> | number  | alpha  | new
|
>
+---------+--------+-------------------------------------------------------+
> | 1413006 | idlfmv | 1413006-idlfmv-idlfmv-idlfmv-idlfmv-idlfmv-idlfmv-idl
|
>
+---------+--------+-------------------------------------------------------+
> 1 row in set (0.00 sec)
>
> mysql>
> mysql> /* show that it even cuts the seperator */
>     -> SELECT number, alpha,
CONCAT_WS('<------------------>',number,alpha) AS new
>     -> FROM group_by_bug GROUP BY new LIMIT 1;
> +---------+--------+-------------------+
> | number  | alpha  | new               |
> +---------+--------+-------------------+
> | 1413006 | idlfmv | 1413006<--------- |
> +---------+--------+-------------------+
> 1 row in set (0.00 sec)
>
>
> I had no recent version handy, so if someone could test it on the
> current MySQL version...
>
> Regards,
>
> Benjamin.
>
>
> PS: CC'ed to bugs list due to repeatable test case.
>
>
> --
> [EMAIL PROTECTED]
>
> ---------------------------------------------------------------------
> Before posting, please check:
>    http://www.mysql.com/manual.php   (the manual)
>    http://lists.mysql.com/           (the list archive)
>
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail
<[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
>
>
>
>


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to