YL,(2) the rows in the table are mysql> select * from tt; +----+------+---------+ | id | name | options | +----+------+---------+ | 1 | abc | (1,2,3) | | 2 | bbc | (2,3,7) | | 3 | cbc | (3,1,7) | +----+------+---------+ <snip> >(4) My intention is a query like >mysql> select id,name from tt where 7 in options; >and expect >+----+------+ >| id | name | >+----+------+ >| 1 | abc | >| 2 | bbc | >| 3 | cbc | >+----+------+ >This is obviously wrong since column 'options' is of type varchar >but look at the values of options, they are like arrays. So my question >is how to fix query (4)? In other words, is there any function that >i can use to get the result illustrated in (4)?SQL doesn't do arrays, indeed keeping more than one value in one column breaks a basic rule of database design, but MySQL does have a column type for storing multiple values (http://dev.mysql.com/doc/mysql/en/set.html), so one solution available to you is to make your options column a SET column. If your options column values are ints, though, your database would be sounder and (not accidentally) your query would be much simpler if you were to project the options values out to a child table. PB ----- YL wrote: My 1st question, can be understood after 3 steps below: (1) Suppose we have a table defined as: mysql> desc tt; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | id | int(11) | | | 0 | | | name | varchar(32) | YES | | NULL | | | options | varchar(32) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ (2) the rows in the table are mysql> select * from tt; +----+------+---------+ | id | name | options | +----+------+---------+ | 1 | abc | (1,2,3) | | 2 | bbc | (2,3,7) | | 3 | cbc | (3,1,7) | +----+------+---------+ (3) the names of the matches of rows whoes id's are in an given array: mysql> select name from tt where id in (2,3); +------+ | name | +------+ | bbc | | cbc | +------+ (4) My intention is a query like mysql> select id,name from tt where 7 in options; and expect +----+------+ | id | name | +----+------+ | 1 | abc | | 2 | bbc | | 3 | cbc | +----+------+ This is obviously wrong since column 'options' is of type varchar but look at the values of options, they are like arrays. So my question is how to fix query (4)? In other words, is there any function that i can use to get the result illustrated in (4)? ----- Original Message ----- From: <[EMAIL PROTECTED]> To: "YL" <[EMAIL PROTECTED]> Cc: <[email protected]> Sent: Friday, September 02, 2005 2:29 PM Subject: Re: 2 query questionsAnswers blended in.... "YL" <[EMAIL PROTECTED]> wrote on 09/02/2005 04:18:27 PM: |
No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.344 / Virus Database: 267.10.18/89 - Release Date: 9/2/2005
-- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
