2015-01-06 3 views
1

У меня есть база данных MySQL, которая используется для расчета денег. У меня есть две таблицы: баланс и деньги.Запрос MySQL LIMIT

В таблице денег есть две колонки: id (что AUTO_INCREMENT и PRIMARY) и имя. Эта таблица содержит в настоящее время:

1 | Card 
2 | Cash 

В таблице баланса есть три столбца: идентификатор (который AUTO_INCREMENT и PRIMARY), баланс, время и money_id. Эта таблица содержит:

1 | 200 | 2014-01-03 03:04:00 | 2 
2 | 150 | 2014-01-03 03:08:00 | 2 
3 | 400 | 2014-01-03 03:10:00 | 1 
4 | 300 | 2014-01-03 03:12:00 | 1 
5 | 100 | 2014-01-03 03:14:00 | 2 
5 | 150 | 2014-01-03 03:16:00 | 2 

Так что на данный момент 100 наличных и 300 карточек. Я хочу, чтобы страница показывала это, например:

Cash 100 
Card 300 

Но у меня проблема с созданием запроса для этого. У меня есть запрос, но он не работает, как это должно работать:

SELECT 
    money.name, 
    balance.balance, 
    balance.time, 
    money.id, 
    balance.id 
FROM 
    money, 
    balance 
WHERE 
    money.id = balance.money_id 
ORDER BY 
    balance.time DESC 

Это будет печатать это:

Cash 150 
Cash 100 
Card 300 
Card 400 
Cash 150 
Cash 200 

Но я хочу только одно значение money.name, и то, что есть сортировать по балансу.time. Я попробовал предел 1, но печатать только:

Cash 150 

Limit 2 также не работает, потому что она печатает:

Cash 150 
Cash 100 

Есть идеи?

И жаль плохой английский, это не мой родной язык. : D

+0

Я голосовал, чтобы закрыть БЭК ause это слишком широко, под которым я подразумеваю «слишком основное» – Strawberry

+0

Похоже, что вы хотите группу, но я не понимаю ваш случай использования для этого, почему бы вам не использовать ограничение? –

+0

Группа, скорее всего. Попробуйте реорганизовать задачу – volkinc

ответ

1

Попробуйте это:

SELECT m.name, b.balance 
FROM money m 
INNER JOIN balance b ON m.id = b.money_id 
INNER JOIN (SELECT b.money_id, MAX(b.time) AS `time` 
      FROM balance b 
      GROUP BY b.money_id 
      ) AS A ON b.money_id = A.money_id AND b.time = A.time; 

Проверьте SQL FIDDLE DEMO

ВЫВОД

| ID | NAME | BALANCE | 
|----|------|---------| 
| 1 | Card |  300 | 
| 2 | Cash |  150 | 
+0

Что это за A.x? MySQL говорит Неизвестный столбец. Если A означает то же, что и m, нет m.time, просто b.time. – codah

+0

@ Saharsh Shah) AS A ON b.money_id = A.money_id И b.time = A.time; Эти A.money_id и A.time – codah

0

Используйте этот SQL

SELECT a.name, COUNT(*) 
FROM money a join balance b 
WHERE a.id = b.money_id 
GROUP BY a.name 
+0

Этот запрос не показывает баланс, поэтому я отредактировал первую строчку: SELECT b.balance, a.name, COUNT (*) Но проблема в том, что он не получает последний баланс по времени баланса , Таким образом, баланс неправильный. – codah

+0

Это правильный ответ на поставленный вопрос. Но с тех пор этот вопрос значительно изменился, что является неудачным. – Strawberry