Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / подзапросы не работают / 5 сообщений из 5, страница 1 из 1
03.08.2015, 13:23:52
    #39021669
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подзапросы не работают
Вот весь запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
$sql ="SELECT `BrandID`, `BrandName`, `AffiliateID`, `UserName`, `Password`, `MinPayout`,
					        `BrandAPI`, `IsVisible`, `Stars`, `Priority`,  `BrandURL`, `BrandImageUrl`,
							(SELECT COUNT(`AccountID`) FROM `brandaccounts` WHERE `brandaccounts`.`BrandID` = `brands`.`BrandID`) AS `Leads`,
							
							
							(SELECT COUNT(`brandaccounts`.`AccountID`) FROM `brandaccounts`, `deposits`, `brands` WHERE deposits.paymentMethod != 'Bonus'
								&& deposits.AccountID = brandaccounts.AccountID && brandaccounts.BrandID = brands.BrandID) AS `FTD`,
								
								
							(SELECT COUNT(`deposits`.`AccountID`) FROM `brandaccounts`, `deposits`, `brands`
								WHERE `brandaccounts`.`BrandID` = `brands`.`BrandID` && brandaccounts.AccountID = deposits.AccountID 
								&& deposits.paymentMethod != 'Bonus') AS `NumOfDeposit`,
							(SELECT SUM(`deposits`.`AccountID`) FROM `brandaccounts`, `deposits`, `brands`
								WHERE `brandaccounts`.`BrandID` = `brands`.`BrandID` && brandaccounts.AccountID = deposits.AccountID 
								&& deposits.paymentMethod != 'Bonus') AS `SumOfDeposit`,
								
						    (SELECT round(SUM(actualBalance),2) FROM `brandaccounts` WHERE brandaccounts.BrandID = brands.BrandID) As `Balance`,	
						    (SELECT round(SUM(requests.Outcome),2) FROM requests, brandaccounts
						   	WHERE brandaccounts.BrandID = brands.BrandID AND brandaccounts.AccountID = requests.AccountID) As `Gain`
						    FROM `brands` WHERE `PlatformID` = :PlatformID && `PartnerID` = :PartnerID";



в запросе перебераются бренды(brands) у кажлого бренда имеется некое количество аккаунтов(brandaccounts) возможно ноль
у каждого аккаунта имеется некое количество депозитов(deposits) возможно 0

в первом запросе надо подсчитать для каждого бренда количесто аккаунтов у которых есть хотя бы один депозит где deposits.paymentMethod != 'Bonus'

вот что написал:

Код: sql
1.
2.
(SELECT COUNT(`brandaccounts`.`AccountID`) FROM `brandaccounts`, `deposits`, `brands` WHERE deposits.paymentMethod != 'Bonus'
								&& deposits.AccountID = brandaccounts.AccountID && brandaccounts.BrandID = brands.BrandID) AS `FTD`,



Второй запрос: общее количкство депозитов для каждого аккаунта при условии что deposits.paymentMethod != 'Bonus'

я меня так
Код: sql
1.
2.
3.
	(SELECT COUNT(`deposits`.`AccountID`) FROM `brandaccounts`, `deposits`, `brands`
								WHERE `brandaccounts`.`BrandID` = `brands`.`BrandID` && brandaccounts.AccountID = deposits.AccountID 
								&& deposits.paymentMethod != 'Bonus') AS `NumOfDeposit`



Третий запрос:

сумма всех депозитов для каждого аккаунта при условии что deposits.paymentMethod != 'Bonus'

пока так
Код: sql
1.
2.
3.
(SELECT SUM(`deposits`.`AccountID`) FROM `brandaccounts`, `deposits`, `brands`
								WHERE `brandaccounts`.`BrandID` = `brands`.`BrandID` && brandaccounts.AccountID = deposits.AccountID 
								&& deposits.paymentMethod != 'Bonus') AS `SumOfDeposit`



но все три подзпроса выдают для каждой строки какую то общию цифру для всей таблицы!

Как подправить???
...
Рейтинг: 0 / 0
03.08.2015, 13:32:54
    #39021685
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подзапросы не работают
вот схемы таблиц:

brandaccounts
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE IF NOT EXISTS `brandaccounts` (
`AccountID` int(11) NOT NULL,
  `UserID` int(11) NOT NULL,
  `BrandID` int(11) NOT NULL,
  `LoginEmail` varchar(50) NOT NULL,
  `LoginID` int(11) NOT NULL,
  `LoginPassword` varchar(50) DEFAULT NULL,
  `initialBalance` double NOT NULL DEFAULT '0',
  `actualBalance` double NOT NULL DEFAULT '0',
  `IsAutoTrade` tinyint(1) NOT NULL DEFAULT '0',
  `MaxBet` int(11) NOT NULL DEFAULT '10',
  `MaxStopLoss` int(11) NOT NULL DEFAULT '0',
  `MaxTakeProfit` int(11) DEFAULT '0',
  `IsTestAccount` bit(1) NOT NULL,
  `VIPGroup` varchar(45) DEFAULT 'Regular'
) ENGINE=InnoDB 




brands
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TABLE IF NOT EXISTS `brands` (
`BrandID` int(11) NOT NULL,
  `PartnerID` int(11) NOT NULL,
  `AffiliateID` int(11) NOT NULL,
  `UserName` varchar(50) NOT NULL,
  `Password` varchar(50) NOT NULL,
  `BrandName` varchar(50) NOT NULL,
  `BrandURL` longtext NOT NULL,
  `BrandAPI` longtext NOT NULL,
  `BrandJSON` longtext,
  `BrandAPIType` int(11) NOT NULL,
  `PlatformID` int(11) DEFAULT NULL,
  `Stars` int(11) DEFAULT '5',
  `Priority` int(11) DEFAULT '0',
  `BrandImageUrl` longtext,
  `AcceptUS` int(11) DEFAULT '0',
  `AcceptEU` int(11) DEFAULT '0',
  `AcceptNONEU` int(11) DEFAULT '0',
  `IsVisible` int(11) DEFAULT '1',
  `Countries` varchar(250) DEFAULT NULL
) ENGINE=InnoDB 



deposits:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE IF NOT EXISTS `deposits` (
`AccountID` int(11) NOT NULL,
  `RemoteID` int(11) NOT NULL,
  `Amount` int(11) NOT NULL,
  `paymentMethod` varchar(50) NOT NULL,
 ) ENGINE=InnoDB 
...
Рейтинг: 0 / 0
03.08.2015, 13:58:48
    #39021709
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подзапросы не работают
Там где-то дубли лезут небось...
Код: sql
1.
2.
(SELECT COUNT(distinct `brandaccounts`.`AccountID`) FROM `brandaccounts`, `deposits`, `brands` WHERE deposits.paymentMethod != 'Bonus'
								&& deposits.AccountID = brandaccounts.AccountID && brandaccounts.BrandID = brands.BrandID) AS `FTD`,

Аналогично и второй.
AreostarТретий запрос:

сумма всех депозитов для каждого аккаунта при условии что deposits.paymentMethod != 'Bonus'

пока так
Код: sql
1.
(SELECT SUM(`deposits`.`AccountID`)

суммирование ИД-ов? Оригинально, но, боюсь, совершенно не в дугу. К тому же зачем использовать 3 таблицы там, где можно обойтись вообще одной??? селект сум(эмаунт) ... вере пээйментметод!="бонус" груп бай аккаунтид... и всё.
Стоп, я понял, откуда эти дубли. В 1 и 2 запросе таблица брэндов тоже не нужна от слова совсем.

ЗЫ. Регистрация от 2007 года, а до сих пор не понимаете, как джойны работают...
...
Рейтинг: 0 / 0
03.08.2015, 14:19:47
    #39021735
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подзапросы не работают
Ну я с ними совсем не долго работаю До того вообще в другой области работал!

а за дистрикт спасибо не вспомнил что-то!!

Но таблица брендов всё таки нужна! для каждого из них считаем ведь! а может и нет. я попробую!

На счёт третьего запроса тут пардон по запарке написал!
...
Рейтинг: 0 / 0
03.08.2015, 14:31:39
    #39021751
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подзапросы не работают
переделал так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
"SELECT `BrandID`, `BrandName`, `AffiliateID`, `UserName`, `Password`, `MinPayout`,
					        `BrandAPI`, `IsVisible`, `Stars`, `Priority`,  `BrandURL`, `BrandImageUrl`,
							(SELECT COUNT(`AccountID`) FROM `brandaccounts` WHERE `brandaccounts`.`BrandID` = `brands`.`BrandID`) AS `Leads`,
							
							
							(SELECT COUNT(distinct `brandaccounts`.`AccountID`) FROM `brandaccounts`, `deposits`, `brands` WHERE deposits.paymentMethod != 'Bonus'
								&& deposits.AccountID = brandaccounts.AccountID && brandaccounts.BrandID = brands.BrandID) AS `FTD`,
								
								
							(SELECT COUNT(distinct `deposits`.`AccountID`) FROM `brandaccounts`, `deposits`, `brands`
								WHERE `brandaccounts`.`BrandID` = `brands`.`BrandID` && brandaccounts.AccountID = deposits.AccountID 
								&& deposits.paymentMethod != 'Bonus') AS `NumOfDeposit`,
							(SELECT SUM(`deposits`.`Amount`) FROM `brandaccounts`, `deposits`, `brands`
								WHERE `brandaccounts`.`BrandID` = `brands`.`BrandID` && brandaccounts.AccountID = deposits.AccountID 
								&& deposits.paymentMethod != 'Bonus') AS `SumOfDeposit`,
								
						    (SELECT round(SUM(actualBalance),2) FROM `brandaccounts` WHERE brandaccounts.BrandID = brands.BrandID) As `Balance`,	
						    (SELECT round(SUM(requests.Outcome),2) FROM requests, brandaccounts
						   	WHERE brandaccounts.BrandID = brands.BrandID AND brandaccounts.AccountID = requests.AccountID) As `Gain`
						    FROM `brands` WHERE `PlatformID` = :PlatformID && `PartnerID` = :PartnerID";



Но резултат та же. в каждом поле отображается сумма подобных полей из таблицы deposits. brands уберать побывал - непомогло!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / подзапросы не работают / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]