所以,首先 - 我的目标是构建一个SQL查询,它会吐出以下JSON对象。正如您所看到的,它会吐出一些基本的竞争细节,然后是每个与该竞争相关的用户。此外,它还为每个用户显示他们已执行的活动。
{
organisationId: 1,
competitionId: "52eabcf0f3672",
title: "Sales Hood Q1 Challenge",
end_date: "2014-03-01 00:00:00",
description: "This is it guys, challenge time!",
prizeImage: "placeholder.jpg",
prizeDescription: "Dinner for 2!",
users: [{
id: 2,
name: "Jane Wilson",
isAdmin: true,
direction: "down",
profilePic: "fighter-1.jpg",
tagline: "My shit is consistently on fire",
totalPoints: 40,
isOnStreak: false,
activities: [{
id: 6431,
time: (57).minutes().ago(),
points: 20
}, {
id: 6431,
time: new Date(),
points: 20
}]
}, {
id: 3,
name: "Caroline Wilson",
isAdmin: false,
direction: "up",
profilePic: "fighter-3.jpg",
tagline: "I am the best",
totalPoints: 60,
isOnStreak: false,
activities: [{
id: 6431,
time: (1).days().ago,
points: 20
}, {
id: 6431,
time: (2).days().ago,
points: 20
}, {
id: 6431,
time: new Date(),
points: 20
}]
}, {
id: 1,
name: "Matthew Lloyd",
isAdmin: false,
direction: "down",
profilePic: "placeholder.jpg",
tagline: "Aref to the rescue!",
totalPoints: 140,
isOnStreak: false,
activities: [{
id: 6431,
time: new Date(),
points: 20
}, {
id: 6431,
time: new Date(),
points: 20
}, {
id: 6432,
time: new Date(),
points: 100
}]
}]
};
我有以下SQL架构(在这个小提琴http://sqlfiddle.com/#!2/82d6e/1处可用),我似乎无法构建一个能够提供我想要的查询。
为了澄清,在数据库中有以下表格
就SQL / PHP查询而言,这是我到目前为止所处的位置 - 但似乎无法做到正确。
$get = mysql_query("SELECT c.organisationId, c.competitionId, c.name, c.end_date, c.about, c.prizeImage, c.prize, u.name AS userName, u.id AS userId, u.profilePic, u.tagline
FROM competitions c
INNER JOIN users1 u ON c.organisationId = u.organisationId
INNER JOIN competitionmembers m ON m.userid = u.id
WHERE c.competitionId = '52a99783c5d6f'") or die("Couldn't select competition details");
$arr = array();
while ($row = mysql_fetch_array($get)) {
$arr = array(
array(
"competitionId" => $row["competitionId"],
"title" => $row["name"],
),
array(
"id" => $row["userId"],
"name" => $row["userName"],
)
);
}
echo json_encode($arr);
?>
如果您能够更接近那个非常棒的json对象,我会非常喜欢这方面的帮助!
答案 0 :(得分:0)
您应该提出更多疑问:
我很确定这会更快更容易管理。如果您只尝试使用一个查询,则会有很多重复的数据,查询会变得非常慢。
获得数据后,请将其保留在数组中,并使用in_array
,array_key_exists
等函数将所有数据放在一起。
PSEUDO CODE:
$competition = query1;
$users = query(get users in competition);
$competition["users"] = $users;
$user_ids = array();
foreach($users as $user)
$user_ids[] = $user['id'];
$activities = query("select * from activities where id_user in (" . implode(",", $user_ids)) . ")";
for ($i = 0; $i < count($competition["users"]); $i++) {
$competition["users"][$i]["activities"] = array();
foreach($activities as $act) {
if ($competition["users"][$i]['id'] == $act["id_user"]) {
// Add activity..
$competition["users"][$i]["activities"][] = $act;
}
}
}
echo json_encode($competition);