e_moon

Рейтинг
108
Регистрация
16.12.2005
Chukcha:
Если нет дат в самой таблице, то и понятно, что вы
и получите

Если хотите получить помесячно, то нужно использовать доп. таблицу с месяцами-годами. Понятное дело, что такой таблицы у вас нет, но ее можно сэмулировать, а затем эту таблицу соединить слева уже с таблицей платежей

Ок, значит подзапрос буду делать... Фиг с ним, а то таблицу столь хитрым запросом уже и так скручиваю в бараний рог)

DmitryAnt:
select DATE_FORMAT(`paymentDate`, '%Y.%c') as month, count(*), sum(`paymentSumm`) from paymentslist where `paymentType`='Webmoney' group by month order by month desc

Минус такого запроса в том, что в пролете оказываются те месяцы, где не было ни одного платежа через Webmoney.

e_moon добавил 28.11.2011 в 16:16

edogs:
sum(if(s.paymentType='Webmoney',paymentSumm,0))

edogs добавил 28.11.2011 в 15:20

group by dateDiff , s.paymentType

Здесь я получаю список всех способов оплаты, месяц не уникальный при таком способе GROUP BY.

Т.е. результат такой:

11-2011 | 2 | 80

11-2011 | 1 | 100

10-2011 | 1 | 50

10-2011 | 1 | 20

А вот такой вывод получить не получается никак:

месяц -> количество платежей всего (всеми способами) -> сумма (только по WebMoney)

Т.е. такого вида:

11-2011 | 3 | 80

10-2011 | 2 | 50

Chukcha:
а может нужен paymentSumm?

Chukcha добавил 28.11.2011 в 14:53
и goup by делать не только поdateDiff , но и по платежной системе

Да, нужен SUMM(paymentSumm), но только где paymentType="Webmoney".

А GROUP BY же как? В течение месяца идет по нескольку платежей через один из способов оплаты!?.

Короче говоря, прихожу к тому что надо все-таки делать в два запроса.

И все-таки не получается как надо.

SUM(s.paymentType="Webmoney") возвращает количество строк, где платеж шел по Webmoney, но не сумму поступивших средств!


SELECT
COUNT(id) AS payCount,
DATE_FORMAT(FROM_UNIXTIME(paymentDate),"%m-%Y") AS dateDiff,
SUM(paymentType="Webmoney") AS paySumm
FROM
paymentslist
GROUP BY
dateDiff
ORDER BY
paymentDate
DESC
LEOnidUKG:
COUNT() и SUM()

Вам ни о чём не говорит? Есть такие полезные функции... их даже в запрос можно вставлять.

Простите, но не могу сообразить. Если правильно понял, вы предлагаете делать подзапрос? Вроде: COUNT( (SELECT * ...) )?

e_moon добавил 28.11.2011 в 13:52

e_moon:
Простите, но не могу сообразить. Если правильно понял, вы предлагаете делать подзапрос? Вроде: COUNT( (SELECT * ...) )?

SUM(s.paymentType="Webmoney") AS paySumm

Спасибо огромное, кажется направили в нужное русло!

'[umka:
;9699061']Так просто поменяйте на таблице кодировку сопоставления на utf8_general_ci и всё.
Динамически её менять смысла нет, т.к. в зависимости от неё перестраивается индекс.

Видимо только так. Это проще будет. Спасибо.

Harius:
А при чём здесь кодировки?
Может просто SELECT * FROM register WHERE name="Рублёв" or name="Рублев"

Тогда уж проще REGEXP. Мне нужно универсальный способ поиска, пример - это частный случай. В базе штук 1000 пользователей. Есть Фёдоров и т.п...

Сорри, я соврал.
Для каждого поля таблицы может быть указана своя кодировка сопоставления.
Если у поля name установлено сопоставление cp1251_general_ci, то выдаётся только одна строка с точным соответствием буквы, но если сопоставление установлено utf8_general_ci, то выдаются обе строки.

Попробую покопать в этом направлении. Наверняка можно в запросе динамически менять сопоставление. Или временную таблицу пробовать создавать. Что-то должно же быть!

'[umka:
;9698919']А... я сразу не воткнул :) Проблема в буквах "е" и "ё".

Это реально и у меня вот на тестовой таблице такой результат получается и при использовании сопоставления utf-8 и cp1251.
Т.е. на один запрос выдаёт 2 ряда.

А как Вы этого добились? Т.е. какой у Вас предварительный запрос на SET NAMES и т.д?

e_moon добавил 23.11.2011 в 16:59

PHPSID:
А phpmyadmin поиск не работает?)

В phpMyAdmin поиск работает точно так же - буквы е и ё считает разными.

Я вас уверяю, что UTF8 тут воооообще не при чём.

Ну как? Объясните? Пока понял одну вещь - в utf буквы е и ё идут одинаковые.

Можно, конечно делать REGEXP-запрос, вроде:

SELECT * FROM table WHERE name REGEXP "Рубл[е|ё]в"

но это же ни FULLTEXT-поиска в перспективе, ни других возможностей...

У меня задача - задать SELECT запрос, допустим, name="Ёлка" и получить 2 ряда, где 1) "Ёлка" и 2) "Елка". Это реально?

e_moon добавил 23.11.2011 в 16:46

'[umka:
;9698872']Все данные MySQL хранит в UTF-8. А то, о чём вы говорите, называется кодировка сопоставления. Что это такое, вы можете узнать из документации.

При работе с базой данных нужно использовать ту кодировку, в которой работает ваш сайт.
Т.е. если сайт в CP1251, то и при работе с базой нужно сделать
SET CHARACTER SET CP1251
И никаких iconv не нужно, база всё сделает сама.

Я ж говорю, что пытаюсь применить рекомендации которые удалось найти. Видимо чего-то не догоняю. У меня сейчас получается только буквальный поиск:


SELECT * FROM register WHERE name="Рублёв"

вернет одну запись с именем Рублёв.


SELECT * FROM register WHERE name="Рублев"

вернет одну запись с именем Рублев.

А мне нужно одним запросом получить обе записи...

кто успел-тот и съел.

Но каким образом? Домен UA нельзя просто взять и зарегить! Ну по правилам домена так...

Если домен уже зарегистрирован на кого-то то это не могло быть не сделано согласно той же процедуры по которой это делает ваш клиент. Соответственно торговая марка (созвучная) уже была зарегистрирована. Погуглите, например, войну за домен google.ua

Ну теперь понятно

Так может есть уже такая ТЗ только по другим классам.

Нашёл на hostmaster.net:

Дело в том, что google.ua был делегирован украинской фирме "ГОУ ОГЛЕ", которой с 2006 года принадлежат ТМ Google і Go Ogle, зарегистрированные в Украине по классам... 9 ... и 45...

Не знал, что одну и ту же марку можно регистрировать в разных классах... Ну что ж, разачарую своего клиента...

ЗЫ. Тогда имею идею наладить выпуск алкоголя под ТМ "Microsoft" - это реально!?

Всего: 96