English 中文(简体)
Foreign Key reference in mysql innodb
原标题:

Simply put: I have a table with 2 columns: one is username and other is nickname. I have another table where I have 2 columns: one is username and other is countNicknames.

I want countNicknames to contain the number of nicknames each user has (and whenever I insert a new nickname to the table1, the value under table2.countNicknames will automatically update.

Can you please write down how to construct the second table to reference the first one?

最佳回答

Why not just count when you need the value?

问题回答

I want countNicknames to contain the number of nicknames each user has (and whenever I insert a new nickname to the table1, the value under table2.countNicknames will automatically update.

This is effectively what a view will do.

CREATE OR REPLACE VIEW user_nickname_count AS
    SELECT t.username,
           COUNT(*)  countNicknames 
      FROM TABLE t
  GROUP BY t.username

A view looks like a table, so you cah join to it if needed. And the only overhead is that it effectively is just a SELECT query being run - the values are calculated on demand, rather than having to setup triggers.

For more info on views, see the documentation.

Well, @Lasse s suggestion is better, but ... there is two other another options...

  1. Does MySql have triggers? If it does, then you would add an Insert, Update, Delete trigger on the first table that updates (or inserts or deletes as necessary) the second table s CountNickNames attribute every time a record is inserted, Updated or deleted from the first table...

    Create Trigger NickNameCountTrig On NickNameCountTable For Insert, Update, Delete As Update nct Set CountNickNames = (Select Count() From FirstTable Where Name = nct.Name) From NickNameCountTable nct Where Name In (Select Distinct Name from inserted Union Select Distinct Name From deleted) -- ----------------------------------------------- Insert NickNameCountTable (Name, CountNickNames) Select name, count() from FirstTable ft Where Not Exists (Select * From NickNameCountTable Where Name = ft.Name) -- ------ This is optional ----------------------- Delete NickNameCountTable Where CountNickNames = 0

  2. Does MySql have indexed views (or some equivilent)? apparently not - so never mind this option ....





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签