У меня есть две таблицы, например, так:
table {node}
`nid`, `uid`, `type`
1 1 basketball
2 1 basketball
3 1 football
4 2 football
5 2 basketball
table {strato_ticket}
`tid`, `author_uid`, `purpose`, `active`
1 1 'Ticket to a basketball game' TRUE
2 1 'Ticket to a football game' TRUE
3 2 'Ticket to a football game' FALSE
Я хотел бы создать отчет, который подсчитывает количество узлов каждого типа, а затем подсчитывает количество активных заявок, связанных с каждым пользователем.с таким типом узла.
Мое решение использует комбинацию SQL и PHP: у меня есть цикл PHP для каждого типа интересующего меня узла, который упрощает запрос SQL и переводит из типа'to' target ', например
$node_types = array('basketball', 'football');
foreach($node_types as $node){
switch($type){
case 'basketball':
$purpose = array('Ticket to a basketball node');
break;
case 'football':
$purpose = array('Ticket to a football game');
break;
}
$where = " WHERE ({strato_ticket}.`purpose` = '"
.implode("' OR {strato_ticket}.`purpose` = '",$purpose)."')";
Наконец, у меня проблема - запрос SQL.Когда я просто подсчитывал узлы, принадлежащие каждому пользователю, он работал нормально:
$query = "
SELECT uid, count( * ) AS nodes_owned
FROM {node} WHERE `type` = '$type'
GROUP BY uid ORDER BY nodes_owned DESC
";
$query = db_query($query);
output:
Now displaying info for basketball.
uid nodes_owned
1 2
2 1
Now displaying info for football.
uid nodes_owned
1 1
2 1
Но теперь, когда мне нужно выполнить запрос к другой таблице, strato_ticket, все усложняется, и мой запрос возвращает FALSE, не бросаяошибка (я думаю).
$query = "
SELECT count(*) as tickets
FROM {strato_ticket} INNER JOIN (
SELECT node.uid, count( * ) AS nodes_owned
FROM {node} WHERE `type` = '$type'
GROUP BY uid
) AS {nodecount}
ON {strato_ticket}.`author_uid` = {nodecount}.`uid`
$where
GROUP BY nodecount.uid ORDER BY nodecount.nodes_owned DESC
";
$query = db_query($query);
Я не очень хорошо разбираюсь в SQL и не совсем уверен, как он сломался.Не могли бы воспользоваться небольшой помощью?
В идеале хотелось бы посмотреть
uid nodes_owned tickets
//basketball
1 2 1
2 1 0
//football
1 1 1
2 1 0