:)
あなたはいろいろ書いように行う必要があります。テーブルを正規化してJOINを使用することをお薦めします。
以下のテストデータベースを考慮してください。データ)
CREATE TABLE `state` (
`state_id` int(11) NOT NULL,
`name` varchar(80) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `state` (`state_id`, `name`) VALUES
(1, 'Florida'),
(2, 'California'),
(3, 'Wisconsin'),
(4, 'New Jersey');
CREATE TABLE `user` (
`user_id` int(11) NOT NULL,
`state_id` int(11) NOT NULL,
`name` varchar(80) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `user` (`user_id`, `state_id`, `name`) VALUES
(1, 1, 'Person 1'),
(2, 2, 'Person 2'),
(3, 1, 'Person 3'),
(4, 3, 'Person 4'),
(5, 1, 'Person 5'),
(6, 1, 'Person 6'),
(7, 1, 'Person 7'),
(8, 3, 'Person 8');
CREATE TABLE `user_friend` (
`user_id` int(11) NOT NULL,
`friend_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `user_friend` (`user_id`, `friend_id`) VALUES
(1, 2),
(1, 3),
(1, 4),
(1, 5),
(1, 6),
(1, 7),
(1, 8),
(2, 1),
(2, 5),
(2, 7),
(2, 8);
ALTER TABLE `state`
ADD PRIMARY KEY (`state_id`);
ALTER TABLE `user`
ADD PRIMARY KEY (`user_id`);
ALTER TABLE `user_friend`
ADD PRIMARY KEY (`user_id`,`friend_id`);
user_friendの「friend_id」は()別のユーザーに戻ってユーザテーブルに接続されています。
私は4つの州から8人を使用していますが、2人しか友人がいません。ほとんどの人はフロリダに住んでいます。
友人がいる人のリストと、状態の友人の名前と、降順でソートされた人のリストを照会します。読書のための
SELECT
u.name as username,
s2.name as friend_state,
count(s2.state_id) as friends
FROM
`user` u
INNER JOIN
user_friend uf on u.user_id = uf.user_id
INNER JOIN
user f on f.user_id = uf.friend_id
INNER JOIN
state s2 on s2.state_id = f.state_id
GROUP BY uf.user_id, s2.state_id
ORDER BY count(s2.state_id) DESC
+----------+--------------+---------+
| username | friend_state | friends |
+----------+--------------+---------+
| Person 1 | Florida | 4 |
| Person 1 | Wisconsin | 2 |
| Person 1 | California | 1 |
| Person 2 | Florida | 3 |
| Person 2 | Wisconsin | 1 |
+----------+--------------+---------+
感謝;)
あなたはどのような出力をしたいですか? –