Отличный вопрос

0

У меня есть таблица с двумя полями; имя и фамилия

Я хочу выбрать Distinct lastnames, но отображать как первое, так и последнее имя в результатах... например:

'SELECT DISTINCT lastname FROM people

вернет только последнее имя. Как я могу также отобразить первое имя?

  • 0
    Даже если бы это было возможно, какой цели мог бы служить такой запрос? Подумайте об этом, нет ни одного имени, связанного с сгруппированной фамилией ... Возможно, вы хотите случайно выбрать человека?
  • 0
    и, как я отмечаю, это, очевидно, невозможно (как вы и предполагали)
Показать ещё 3 комментария
Теги:

4 ответа

2
Лучший ответ

SQL обычно плохо реагирует на двусмысленность. Если вы хотите включить только один экземпляр фамилии, но любое соответствующее имя, вам нужно будет описать, как выбрать, какое имя (даже если вам все равно). Возможно:

SELECT MIN(firstname), lastname
FROM ...
GROUP BY lastname
0

Учитывая, что вы используете 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 и аналитические функции и значительно затрудняет рандомизацию таких вещей.

0
<?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

Очень простой, но хороший учебник, и я думаю, что он идеально подходит!

0

Скажем, что у вас есть эти данные:

LastName   FirstName
Jones      Bob
Jones      Dave

Вы хотите отобразить как "Bob Jones", так и "Dave Jones"? Тогда вы будете делать:

SELECT DISTINCT FirstName, LastName FROM people

Если это не то, что вы хотите, как вы определяете, какое имя использовать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню