Найти максимальное значение в столбце базы данных с предложением Where - PullRequest
0 голосов
/ 25 декабря 2010

Допустим, я настроил таблицу базы данных таким образом,

ID | Name  | Area | Timestamp
---+-------+------+------------
1  | Hill  | 1    | 1293243080
2  | Sam   | 1    | 1293243084
3  | Joe   | 2    | 1293243087
4  | Bob   | 2    | 1293243089
5  | Matt  | 3    | 1293243091
6  | Billy | 3    | 1293243095

Затем я хочу вернуть Имя человека с самой большой меткой времени и с определенным номером зоны.

Однако, когда я пытаюсь вернуть, например, имя Боб, я получаю Билли только потому, что у него самая большая отметка времени из всех.

Как я могу заставить php выбрать не только человека с максимальной меткой времени, но и человека с определенным номером зоны?

Пока это мой код -

(я зацикливаю его, потому что отображаю имя человека с самой большой меткой времени в каждой области)

for ($t = 1; $t <= 3; $t++){
   $result = mysql_query("SELECT * FROM forum_posts WHERE Area='$t' AND Timestamp=(select max(Timestamp) from forum_posts)");

   while($row = mysql_fetch_array($result))
   {
       $post_name[$t]=$row['Name'];
   }
}

print_r ($post_name); 

Что вы, ребята, предлагаете мне сделать?

Ответы [ 5 ]

4 голосов
/ 25 декабря 2010
   $result = mysql_query("SELECT * FROM forum_posts WHERE Area='$t' AND Timestamp=(select max(Timestamp) from forum_posts where Area='$t')");

лучшим вариантом будет.

$result = mysql_query("SELECT * FROM forum_posts WHERE Area='$t' ORDER BY Timestamp DESC LIMIT 1");
3 голосов
/ 26 ноября 2011

используйте это

$ result = mysql_query ("SELECT * FROM forum_posts WHERE Area = '$ t' ORDER BY Timestamp DESC LIMIT 1");

2 голосов
/ 25 декабря 2010

Вам нужно GROUP BY по вашему запросу.

1 голос
/ 25 декабря 2010

Вам необходимо ИЛИ условие. Запрос будет:

$result = mysql_query("SELECT * FROM forum_posts WHERE Area='$t' OR Timestamp=(select max(Timestamp) from forum_posts)");
0 голосов
/ 25 декабря 2010
SELECT * FROM forum_posts (
  SELECT
    RANK() OVER (ORDER BY timestamp ASC) AS ranking,
    name
  FROM person
  WHERE area = 1
) AS foo
WHERE ranking = 1
...