У меня есть таблица с двумя полями; имя и фамилия
Я хочу выбрать Distinct lastnames, но отображать как первое, так и последнее имя в результатах... например:
'SELECT DISTINCT lastname FROM people
вернет только последнее имя. Как я могу также отобразить первое имя?
SQL обычно плохо реагирует на двусмысленность. Если вы хотите включить только один экземпляр фамилии, но любое соответствующее имя, вам нужно будет описать, как выбрать, какое имя (даже если вам все равно). Возможно:
SELECT MIN(firstname), lastname
FROM ...
GROUP BY lastname
Учитывая, что вы используете MySQL, этот запрос будет работать и будет возвращать "случайное" имя (он может всегда возвращать то же самое на некоторое время, а затем изменять после обновления/удаления/вставки в запрос):
SELECT FirstName, LastName FROM people GROUP BY LastName
Обратите внимание, что этот запрос не будет работать с любым интеллектуальным RDMBS (то есть не с MySQL). Хороший способ сделать это (и на самом деле выбрать случайные имена) - это использовать аналитические функции (синтаксис PostgreSQL):
WITH TT AS (
SELECT FirstName, LastName, ROW_NUMBER() OVER(PARTITION BY LastName ORDER BY random()) AS R
FROM people
)
SELECT FirstName, LastName
FROM TT
WHERE R = 1;
К сожалению, для вас MySQL не знает CTE и аналитические функции и значительно затрудняет рандомизацию таких вещей.
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
mysql_close($con);
?>
Взято из:
http://www.w3schools.com/php/php_mysql_select.asp
Очень простой, но хороший учебник, и я думаю, что он идеально подходит!
Скажем, что у вас есть эти данные:
LastName FirstName
Jones Bob
Jones Dave
Вы хотите отобразить как "Bob Jones", так и "Dave Jones"? Тогда вы будете делать:
SELECT DISTINCT FirstName, LastName FROM people
Если это не то, что вы хотите, как вы определяете, какое имя использовать?