これらの列を持つテーブルがあります。
id-名前-性別-年齢-国
gender
同じ名前を持っているすべての人の名前を、MySQLとPHPの誰かage
と一緒に表示したいと思います。country
そのための最良のMySQLクエリは何でしょうか?
これを試して:
SELECT p1.Name
FROM peoplenames p1
INNER JOIN
(
SELECT Gender, Age, Country
FROM peoplenames p1
GROUP BY Gender, Age, Country
HAVING COUNT(*) > 1
) p2 ON p1.Gender = p2.Gender
AND p1.Age = p2.Age
AND p1.Country = p2.Country;
これにより、の重複がない名前は無視されGender, Age, Country
ます。
これにより、同じ名前が付けられますGender, Age, Country
。ただし、この組み合わせGender, Age, Country
が1回だけ発生する場合、それらの名前は無視されます。
たとえば、次のサンプルデータがあるとします。
| ID | NAME | GENDER | AGE | COUNTRY |
------------------------------------------
| 1 | Ahmed | Male | 20 | Egypt |
| 2 | Mohammed | Male | 20 | Egypt |
| 3 | ali | Male | 20 | Egypt |
| 4 | Saly | Female | 25 | Jordan |
| 5 | Sara | Female | 25 | Jordan |
| 6 | Mohammed | Male | 60 | Egypt |
| 7 | Khalid | Male | 20 | KSA |
Ahmed
、Mohammed
(ID 2)でali
、同じGender
、、Age
およびCountry
:Male, 20, Egypt
。
saly
と同じSara
。5つの名前のみが選択されます。
| NAME |
------------
| Ahmed |
| Mohammed |
| ali |
| Saly |
| Sara |
他の人が:
| 6 | Mohammed | Male | 60 | Egypt |
| 7 | Khalid | Male | 20 | KSA |
同じ行が他にないGender, Age, Country
ため、無視されます。
SELECT
yt.*
FROM yourTable AS yt
JOIN
(SELECT * FROM yourTable yt2 WHERE id = $id) yt3
ON yt.Gender = yt3.Gender AND yt.Age = yt3.Age AND yt.Country = yt3.Country
ライブで演奏するのを見る
SELECT Name
FROM table_name
WHERE Gender = (SELECT Gender FROM table_name WHERE id = $x) AND
Age = (SELECT Age FROM table_name WHERE id = $x) AND
Country = (SELECT Country FROM table_name WHERE id = $x);
$x
特定の人のIDになります。
@fthiellaのコメントによると
SELECT Name
FROM table_name
WHERE (Gender, Age, Country) = (SELECT Gender, Age, Country FROM table_name WHERE id = $x)
select `name` from `tablename` group by `gender`,`age `,`country`;