Подсчитать значения в поле MySQL - PullRequest
0 голосов
/ 05 марта 2012

У меня есть такая таблица mysql с валютами, хранящимися в базе данных с помощью флажков и php

product       currencies
-----------   --------------
prod_name_1   *usd*cad*euro*
prod_name_2   *usd*cad*
prod_name_3   *usd*cad*euro
prod_name_4   
prod_name_5   *usd*

Я хочу подсчитать валюты в поле с запросом.Ожидаемые результаты:

product       currencies count
-----------   ----------------
prod_name_1   3
prod_name_2   2
prod_name_3   3
prod_name_4   0
prod_name_5   1

Как я могу запросить мою базу данных, чтобы получить этот результат?Я перепробовал много функций (включая COUNT и SUM) со многими условными обозначениями, но ничего не работает.Любая помощь будет очень ценится!

Спасибо всем!

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Вам нужна функция манипуляции со строками для подсчета различных валют с учетом ваших данных NON-NF1.

Попробуйте что-то вроде этого:

select product,
       CAST((LENGTH(currencies) - LENGTH(REPLACE(currencies, '*', ''))) / LENGTH('*') AS UNSIGNED) AS currencies_count
  from YOUR_TABLE

Дело в том, что вам нужно будет представить свойданные в согласованном порядке.IE:

*usd*cad*euro

Всегда должен быть представлен таким образом , а не :

*usd*cad*euro*

В противном случае вы будете считать больше валют, чем имеете.

0 голосов
/ 05 марта 2012

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

product      currencies
-----------------------
prod_name_1  usd
prod_name_1  cad
prod_name_1  euro

, тогда вы можете легко выполнить простой sql count where product='prod_name_1' (точный запрос, конечно, на ваше усмотрение). Редактировать : Как указал tstenner, вам следует использовать отдельную таблицу для ваших валют и использовать для этого внешний ключ.Мой пример - только логическое представление.

Если это не вариант, как @Pablo Santa Cruz сказал в своем ответе, вам нужно будет выполнить некоторые манипуляции со строками.Вы можете сделать это на стороне базы данных или на стороне клиента, если это только для отображения (может быть проще, поскольку у вас, вероятно, будут лучшие библиотеки для работы со строками).По сути, вам нужно разделить строку currencies на символ *, чтобы получить массив, аналогичный ["usd", "cad", "euro"].Затем вы можете отобразить его, как вы хотите.

0 голосов
/ 05 марта 2012

Не следует использовать поле для хранения нескольких полей, поэтому MySQL не имеет функции разделения.

Вместо этого создайте другую таблицу с 2 полями (идентификатор продукта и идентификатор валюты).Вы можете посчитать ваши валюты для ваших продуктов с помощью объединения (SELECT p.product_name, COUNT(c.currency_) FROM products p JOIN productconcurrencies c ON p.product_id=c.product_id).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...