Как подсчитать количество полей с известным "id"

InstantCMS 2.X
#1 26 сентября 2017 в 00:56
Друзья подскажите пожалуйста как подсчитать количество полей с известным id ?

Например подсчитать количество строки в базе cms_sport в таблице "teams_id" у которого все числа 5 равны в базе cms_sport_tournament "id_teams" 5
#2 26 сентября 2017 в 08:56
Нико,
Вообще ничего не понял.

Друзья подскажите пожалуйста как подсчитать количество полей с известным id ?

Нико
Во всех таблицах столбец id должен иметь уникальный индекс. Количество строк с известным id в любом случае равно одному.

Например подсчитать количество строки в базе cms_sport в таблице "teams_id" у которого все числа 5 равны в базе cms_sport_tournament "id_teams" 5

Нико
В смысле подсчитать количество строк в одной таблице у которых какое-то значение совпадает со значением в другой таблице?
#3 26 сентября 2017 в 10:57


Нико,
Вообще ничего не понял.

Друзья подскажите пожалуйста как подсчитать количество полей с известным id ?

Нико
Во всех таблицах столбец id должен иметь уникальный индекс. Количество строк с известным id в любом случае равно одному.

Например подсчитать количество строки в базе cms_sport в таблице "teams_id" у которого все числа 5 равны в базе cms_sport_tournament "id_teams" 5

Нико
В смысле подсчитать количество строк в одной таблице у которых какое-то значение совпадает со значением в другой таблице?

Ris

Да именно так, в таблице сms_sport в "system_name" есть системное имя "basketball".
в табилце cms_sport_info в "name_system" есть много системный имен "basketball". Вот и надо подсчитать сколько их там.
Но кроме "basketball" там есть и еще разные системные имена поэтому надо как то в мпссиве считать.

если $sport равняется $sport тогда считываем сколько там полей в cms_sport_info

Грубо говоря мне нужно узнать сколько игроков в команду basketball, список игроков в cms_sport_info
#4 26 сентября 2017 в 11:07
Ну, в mysql это выглядит довольно просто:
  1. SELECT COUNT(name_system) FROM cms_sport_info WHERE name_system = "basketball"
В переводе на инстантовский:
  1. $count = $this->model->getCount('sport_info', 'name_system')->filterEqual('name_system', 'basketball');
#5 26 сентября 2017 в 11:23


Ну, в mysql это выглядит довольно просто:

  1. SELECT COUNT(name_system) FROM cms_sport_info WHERE name_system = "basketball"
В переводе на инстантовский:
  1. $count = $this->model->getCount('sport_info', 'name_system')->filterEqual('name_system', 'basketball');

Ris



То что вы показали кажется мы всю операцию делаем в одной таблице. Вот фотка.
#6 26 сентября 2017 в 11:43

То что вы показали кажется мы всю операцию делаем в одной таблице. Вот фотка

Нико
Так я и не понял, зачем нужна первая таблица, если Вы уже знаете sport_system для выборки из второй таблицы.

Другой вариант, если Вам сначала нужно получить это имя вида спорта из первой таблицы по id.

Тогда в mysql запрос будет выглядеть так:
  1. SELECT COUNT(sport_system) FROM cms_sport_team_info WHERE sport_system = (SELECT system_name FROM cms_sport WHERE id = {нужный ид})
либо так:
  1. SELECT COUNT(i.sport_system) FROM cms_sport_team_info i WHERE s.id = {нужный ид}
  2. LEFT JOIN cms_sport s ON s.system_name = i.sport_system
Функция соответственно будет такая:

  1. public function getCountSport($id) {
  2. $count = $this->model->getCount('sport_team_info', 'sport_system')->joinLeft('sport', 's', 's.system_name = i.sport_system')->filterEqual('s.id', $id);
  3. return $count;
  4. }
Отправляете в эту функцию id вида спорта — получаете количество турниров по этому виду спорта.
#7 26 сентября 2017 в 11:58


То что вы показали кажется мы всю операцию делаем в одной таблице. Вот фотка

Нико
Так я и не понял, зачем нужна первая таблица, если Вы уже знаете sport_system для выборки из второй таблицы.

Другой вариант, если Вам сначала нужно получить это имя вида спорта из первой таблицы по id.

Тогда в mysql запрос будет выглядеть так:
  1. SELECT COUNT(sport_system) FROM cms_sport_team_info WHERE sport_system = (SELECT system_name FROM cms_sport WHERE id = {нужный ид})
либо так:
  1. SELECT COUNT(i.sport_system) FROM cms_sport_team_info i WHERE s.id = {нужный ид}
  2. LEFT JOIN cms_sport s ON s.system_name = i.sport_system
Функция соответственно будет такая:

  1. public function getCountSport($id) {
  2. $count = $this->model->getCount('sport_team_info', 'sport_system')->joinLeft('sport', 's', 's.system_name = i.sport_system')->filterEqual('s.id', $id);
  3. return $count;
  4. }
Отправляете в эту функцию id вида спорта — получаете количество турниров по этому виду спорта.

Ris

Неа не то щас я вам покажу что мне именно нужно наверное будет какой то вариант просто я не знаю как это сделать.




Я сделал это так но по id но это не правильно, на каждый станице показывало то что на данный момент, а не точто там

То есть вот так сделал

  1. public function getUsersInSportsCount($id, $basketball){
  2. $this->filterEqual('tournament_id', $id);
  3. $this->filterEqual('sport_system', $basketball);
  4. return $this->getCount('sport_team_info');
  5. }
и получилось вот так сами поняли почему.




  1. public function getUsersInSportsCount($id, $basketball){
  2. $this->filterEqual('tournament_id', $id);
  3. $this->filterEqual('sport_system', $basketball); (вот это нужно брать из базы наверно как то что бы заранее уже считало а не через массив и экшен);
  4. return $this->getCount('sport_team_info');
  5. }
#8 26 сентября 2017 в 12:07
Нико,
Опишите нормально техническое задание — будет нормальное решение.
#9 26 сентября 2017 в 23:59
Вот фотка я там подчеркнул все к чему относится, прописывать так могу
  1. $this->joinLeft('sport', 'm', 'm.id = i.sport');
  2. $this->filterEqual('m.id', '1');
Но дело в том что вид спорта добавляется через админ панель и каждый раз добавляя новый вид спорта думаю не правильно опять дописывать фильтр в коде.
#10 27 сентября 2017 в 09:25
Нико,
Вы немножко неправильно подходите к вопросу.
Тут нужно не картинки выкладывать (на которых я ничего не вижу), а корректно сформулировать условия задачи.
Какие у нас входные данные?
Номер команды и вид спорта, по которому нужна статистика? В каких таблицах содержатся эти данные?
Что нам нужно получить? Счетчик турниров определенной команды в определенном виде спорта?
В какой таблице эти турниры?
Тогда можно будет составить запрос в базу, задать в WHERE входные данные и получить на выходе счетчик строк, которые подходят по поставленным условиям.
#11 27 сентября 2017 в 13:06


Нико,
Вы немножко неправильно подходите к вопросу.
Тут нужно не картинки выкладывать (на которых я ничего не вижу), а корректно сформулировать условия задачи.
Какие у нас входные данные?
Номер команды и вид спорта, по которому нужна статистика? В каких таблицах содержатся эти данные?
Что нам нужно получить? Счетчик турниров определенной команды в определенном виде спорта?
В какой таблице эти турниры?
Тогда можно будет составить запрос в базу, задать в WHERE входные данные и получить на выходе счетчик строк, которые подходят по поставленным условиям.

Ris

Да может быть.
Мне нужно считать количество турниров в {cms}_sport_tournaments ячейке sport_id, в котором {cms}_sport равен таблице id.

В {cms}_sport -э хранятся виды спорта баскетбол, волейбол футбол и т.д они добавляются через админ панель.

В {cms}_sport_tournaments — э хранятся турниры и в ячейке sport_id добавляются id видов спорта что бы выводить турнир который относится к виду спорта.

Вот и теперь нужно вывести сколько турниров для каждого вида спорта.
#12 2 октября 2017 в 23:24
Всем привет извините что пишу не туда, но нужна помощь по решению проблемы с выбором городов при регистрации пользователей и при редактировании своего профиля.
Выводится вот такая ошибка, когда жму изменить город "an error ocurred". В чем может быть проблема с БД?
И такое же при регистрации новых пользователей выдает, когда тот выбирает город.
#13 2 октября 2017 в 23:26
@Sh4maH,
Текст ошибки целиком, если можно.
"an error ocurred" означает просто "случилась ошибка".
#14 2 октября 2017 в 23:59


@Sh4maH,
Текст ошибки целиком, если можно.
"an error ocurred" означает просто "случилась ошибка".

Ris
В том то и дело, что только это и выдает в ajax окне.
#15 3 октября 2017 в 00:05



@Sh4maH,
Текст ошибки целиком, если можно.
"an error ocurred" означает просто "случилась ошибка".

Ris
В том то и дело, что только это и выдает в ajax окне.

@Sh4maH

Ошибок может быть куча, и в шаблоне и в системе. Ну если вы трогали их, а так система работает стабильно.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.