"Jorge Calas" <[EMAIL PROTECTED]> wrote: > > Hello, I'm new to SQL and MySQL, I'm developing a web application (php) and I need > some tables relationed between them with a foreing key. The idea is the following > > create table persons ( > cid smallint auto_increment not null unique, > name varchar(30), > alias varchar(10), > primary key (cid)); > > create table phones( > pid smallint auto_increment not null unique, > cid smallint not null, > phone varchar(10), > obs varchar(40), > primary key (pid)); > > There are many other tables like phones and I will need to do with them the same > thinks. > > The questions are the followings: > > - How do I preserve integrity? I mean, I don't want to have phones without persons, > so when I delete a person I want to make a cascade erase.
With InnoDB tables you can use ON DELETE CASCADE. With MyISAM tables you should delete corresponding row from phone table manually. > - When I do a: > select * from persons left join phones using (cid); > I get as many rows as phones have this person, is there any way to make a query that > returns a single row with all the information. > Since version 4.1 you can use function GROUP_CONCAT(): http://www.mysql.com/doc/en/GROUP-BY-Functions.html -- For technical support contracts, goto https://order.mysql.com/?ref=ensita This email is sponsored by Ensita.net http://www.ensita.net/ __ ___ ___ ____ __ / |/ /_ __/ __/ __ \/ / Victoria Reznichenko / /|_/ / // /\ \/ /_/ / /__ [EMAIL PROTECTED] /_/ /_/\_, /___/\___\_\___/ MySQL AB / Ensita.net <___/ www.mysql.com -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]