Создание счетчика для появления номеров лотереи в длинном текстовом столбце MYSQL.Это может потребовать PHP - PullRequest
0 голосов
/ 09 ноября 2011

Мне может понадобиться PHP или другой язык для этой работы, хотя решение на MYSQL напрямую предпочтительнее.

Я собрал список выигрышных номеров лотереи для лотереи штата Нью-Йорк за последний год. Я создал таблицу из 4 столбцов в MYSQL для хранения данных. Один для даты, один для выигрышного номера лотереи, один для бонусного номера и один для выплаты. Проведя небольшое исследование о том, как хранить номера лотереи, которые я рассматривал как массив целых, я нашел рекомендацию использовать тип данных длинного текста. Данные вводятся с помощью трубы, разделяющей каждое значение следующим образом: 01 | 34 | 35 | 36 | 56 | 59. Числа всегда в порядке возрастания, имеют две цифры и не превышают 59.

Следующим шагом в моем процессе является создание таблицы, которая показывает, как часто происходит каждое число. Вот мой псевдокод для этой вещи:

1 Create table "Number_Frequency"
2 Create column "Number"(Type int)
3 Create column "Frequency"(Type int, initial value 0)
4 Look at table "new_table"
5 Look at column "numbers"
6 Look at first row
7 Look at first two digits
  7A If this two digit number isn't in the column "Number" in the table "Number_Frequency", add to column "Number" in table "Number_Frequency" and set corresponding "Frequency" to 1
  7B Else if number is already in column "Number" increase the value of frequency by 1
8 Look for a pipe symbol
  8A If there is a pipe symbol, repeat all parts of step 7 for the next two digits after the pipe symbol.
  8B Else if there is another row, look at the first two digits of that row, and start from step 7A
  8C Else terminate.

Как видите, у меня очень четкое представление о том, что я хочу сделать. У меня есть несколько простых вопросов для SO: это можно сделать исключительно в MYSQL? И что еще более важно, есть главная, очевидная причина, почему не стоит беспокоиться? Если есть, то в чем причина?

1 Ответ

1 голос
/ 09 ноября 2011

Хранение набора чисел фиксированного размера в виде объединенной строки - безумие.

Рассмотрите возможность хранения их в 6 отдельных столбцах, каждый из которых имеет целочисленный тип. Кроме того, храните их в таблице с двумя столбцами: draw_id и value; Каждый розыгрыш имеет 6 записей в этой таблице. Затем становится тривиально создать запрос для поиска количества вхождений данного значения.

Так что-то вроде:

draw_values
===========

draw_id       value
-------------------
538           1
538           34
538           35
538           36
538           56
538           59
539           5
539           10
539           13
539           27
539           38
539           56
...


draw
====

draw_id       winner_id       payout
---------------------------------------
538           127740          1000000
539           839820          1500000
...

, где draw_id - это внешний ключ вашей основной таблицы, который содержит разовые данные для каждого розыгрыша (например, выплаты).

...