|
Карма: 0
Сообщений: 10 Сила слова: 0
|
Есть табличка: http://red-squadron.ru/index.php?ind=stats
Всё её содержимое хранится в одной таблице БД, в таком виде:
Код таков:
$output = "
<tr>
<td>
<table width='100%' border='1' cellpadding='0' cellspacing='0'>
<tr>
<td align='center' bgcolor='#E9E9E9'>Score</td>
<td align='center' bgcolor='#E9E9E9'>Имя</td>
<td align='center' bgcolor='#E9E9E9'>R</td>
<td align='center' bgcolor='#E9E9E9'>Убийств</td>
<td align='center' bgcolor='#E9E9E9'>Онлайн</td>
<td align='center' bgcolor='#E9E9E9'>Updated</td>
</tr>
";
if ($mkportals->input['ide'] == "") {
$DB->query( "SELECT * FROM mkp_stats GROUP BY name ORDER BY date");
} else {
$ids = $mkportals->input['ide'];
$DB->query( "SELECT * FROM mkp_stats WHERE ide=$ids AND status=0 ORDER BY date");
}
while( $row = $DB->fetch_row($query) ) {
$id = $row['id'];
$ide = $row['ide'];
$name = $row['name'];
$r = $row['r'];
$kills = $row['kills'];
$online = $row['online'];
$date = $row['date'];
$score=$r+$kills;
$output .= "
<tr>
<td>$score</td>
<td><a href='index.php?ind=stats&ide=$ide'>$name</a></td>
<td>$n</td>
<td>$kills</td>
<td>$online</td>
<td>$date</td>
</tr>
";
}
$output .= "
</tr>
</table>
</td>
</tr>";
У Dr. Manhattan здесь есть 3 записи, в корне таблицы выдаётся первая попавшаяся за счёт GROUP BY, а нужно чтобы выдавалась последняя по дате. Как это реализовать?
|
|
|
|
|
Записан
|
|
|
|
|
Stasovsky ↓
|
 |
|
25 Июль, 2010, 05:27:26 , спустя 25 минут 5 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Сенсей XD
Группа: Джедаи Карма: 54
Сообщений: 3653 Сила слова: 1.48
|
ORDER BY date DESC
вроде так...
|
|
|
|
|
Записан
|
|
|
|
|
Freakmeister ↓
|
 |
|
25 Июль, 2010, 06:35:24 , спустя 1 час 7 минут 58 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 10 Сила слова: 0
|
DESC отвечает за конечный вывод, к ORDER BY оно не аттачится. Тоесть, если без DESC у меня выдаёт: "Dr. Manhattan, Batman, FLASH", то с DESC выдаст просто обратный порядок: FLASH, Batman, Dr. Manhattan.
|
|
|
|
|
Записан
|
|
|
|
|
Stasovsky ↓
|
 |
|
25 Июль, 2010, 07:33:16 , спустя 57 минут 52 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Сенсей XD
Группа: Джедаи Карма: 54
Сообщений: 3653 Сила слова: 1.48
|
ну хз, у меня почему-то все нормально...
SELECT * FROM posts GROUP BY title ORDER BY created DESC"
сортирует по дате и последние вверху, не смотря на "GROUP BY title" Спустя 1 минуту 6 секунд добавил эт я на примере своей таблицы... мб у тебя какая-то волшебная_))_
|
|
|
|
|
Записан
|
|
|
|
|
Givi ↓
|
 |
|
25 Июль, 2010, 07:54:08 , спустя 20 минут 52 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
Freakmeister, ты просто не совсем корректно понял к чему применяется DESC и ASC. На самом деле это не сама сортировка, её тип. А следовательно, нужно указать к чему именно этот тип привязать. В твоем случае это дата.
Ну и за вывод никакая часть запроса не отвечает. Она отвечает лишь только за получение нужных данных в нужной форме/порядке из базы, остальное уже не её дело.
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
Freakmeister ↓
|
 |
|
25 Июль, 2010, 08:18:47 , спустя 24 минуты 39 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 10 Сила слова: 0
|
Ок, а конкретика есть какая-то?)
$DB->query( "SELECT * FROM mkp_stats GROUP BY name ORDER BY date DESC"); - меняет порядок ORDER BY, а не GROUP BY.
$DB->query( "SELECT * FROM mkp_stats GROUP BY name DESC ORDER BY date"); - не работает.
|
|
|
|
|
Записан
|
|
|
|
|
Stasovsky ↓
|
 |
|
25 Июль, 2010, 08:28:55 , спустя 10 минут 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Сенсей XD
Группа: Джедаи Карма: 54
Сообщений: 3653 Сила слова: 1.48
|
я вааще mysql позвала по пхпмайадмину)) там вроде DESC и ASC на ORDER BY вешаются))
или я совсем дурак и нифига не шарю)) Спустя 2 минуты 46 секунд добавил хотя GROUP BY bla DESC пашет)) Спустя 1 минуту 25 секунд добавил и даже такое пашет))
SELECT *
FROM `posts`
GROUP BY `bodytext` DESC
ORDER BY `created` DESC
но приоритет на последнее)) Спустя 1 минуту 36 секунд добавил меняет порядок ORDER BY, а не GROUP BY.
на[рена тебе менять порядок GROUP если ты хочешь по дате?! оО
|
|
|
|
|
Записан
|
|
|
|
|
Freakmeister ↓
|
 |
|
25 Июль, 2010, 08:43:23 , спустя 14 минут 28 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
|
|
adw0rd ↓
|
 |
|
25 Июль, 2010, 08:58:45 , спустя 15 минут 22 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17623 Сила слова: 1.67
|
заюзай MAX() для нужного поля даты
|
|
|
|
|
Записан
|
|
|
|
|
Givi ↓
|
 |
|
25 Июль, 2010, 09:05:20 , спустя 6 минут 35 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
Freakmeister, сделай двойную сортировку - сначала по дате, потом по имени. Получится так: ...ORDER BY date DESC, name;
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
Freakmeister ↓
|
 |
|
25 Июль, 2010, 11:18:52 , спустя 2 часа 13 минут 32 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 10 Сила слова: 0
|
Один добрый дядя подсказал синтаксис:
$DB->query( "SELECT *, ($form_score) AS score FROM mkp_stats s1 WHERE NOT EXISTS
(SELECT * FROM mkp_stats s2 WHERE s1.ide = s2.ide AND s1.date < s2.date) ORDER BY $order");
Всё работает, сейчас вы можете наблюдать это на странице.
Но у меня тут появилась более сумасшедшая идея. Пока не могу придумать как её реализовать, и вообще не уверен, что это можно сделать через SELECT одним запросом. Буду признателен за совет или идею.
Собственно, в таблице есть графа kills, я хочу чтобы в ней писалось не только кол-во убийств, а в скобках ещё сколько игрок наверстал с прошлого обновления статистики. Например, в таком виде: Убийства: 141234 (+117).
По идеи, тут надо вытаскивать последнюю запись, потом предпоследнюю запись и вычитать из последней предпоследнюю. Пока не могу даже себе представить как вытащить предпоследнюю запись... внутри цикла while( $row = $DB->fetch_row($query) ) { делать ещё одно обращение к бд нельзя?
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
25 Июль, 2010, 11:31:17 , спустя 12 минут 25 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17623 Сила слова: 1.67
|
Вытащить 2 крайние записи и вычесть одну из другой никак?
|
|
|
|
|
Записан
|
|
|
|
|
Freakmeister ↓
|
 |
|
26 Июль, 2010, 12:10:32 , спустя 39 минут 15 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 10 Сила слова: 0
|
Наверно можно как-то. Меня интересует как.)
|
|
|
|
|
Записан
|
|
|
|
|
adw0rd ↓
|
 |
|
26 Июль, 2010, 12:15:08 , спустя 4 минуты 36 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17623 Сила слова: 1.67
|
select field from table order by field2 desc limit 2
а в php $row[0]['field'] - $row[1]['field'], вот о чем я
|
|
|
|
|
Записан
|
|
|
|
|
Freakmeister ↓
|
 |
|
26 Июль, 2010, 11:33:06 , спустя 11 часов 17 минут 58 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 10 Сила слова: 0
|
К запросу выше desc limit 2 прицепить не получится, потому что он просто выдаст 2 записи по разным никам и остановится на этом. Тут похоже надо делать второй запрос и очень не хотелось бы запихивать его в массив на 150 записей. Если сделать второе обращение к бд прямо внутри цикла первого обращения, то такая структура будет работать?
|
|
|
|
|
Записан
|
|
|
|
|