今天我在PHP中找出一些东西时遇到了一些麻烦。由于我通常会有一些絮絮叨叨的倾向,我会尽量简短但简洁。这就是我想要做的。
数组#1是一个多维数组,包含针对数据库中的用户表执行的MySQL查询的结果。它看起来像这样:
Array ( [0] => Array ( [id] => 79 [firstname] => John [lastname] => Doe [province] => Province [email] => someemail@gmail.com [primaryphone] => 123-456-7890 ) [1] => Array ( [id] => 113 [firstname] => Jane [lastname] => Doe [province] => Province [email] => email@gmail.com [primaryphone] => 123-456-7890 ) )
数组#2是另一个多维数组,其中包含针对数据库中的成员资格表执行的MySQL查询的结果,该成员资格表包含与当前组关联的用户的ID。它看起来如下:
Array ( [0] => Array ( [userid] => 79 ) [1] => Array ( [userid] => 115 ) [2] => Array ( [userid] => 124 ) )
我要做的是,对于阵列#1中返回的每个用户,在[userid]
下的数组#2中查找与数组#1中的值[id]
匹配的值。如果找到每个用户的匹配项,请在阵列#1中为该用户附加键和值[ismember] => 1
- 如果没有匹配项,则将[ismember] => 0
对添加到阵列#1。
我觉得这应该是一个非常简单的过程,我可能只是错过了一些基本的东西......但是我已经有一段时间了,并且没有取得多大进展。谢谢大家的时间和帮助。
==编辑== 第一个数组由以下MySQL查询生成:
$query = "
SELECT
id,
firstname,
lastname,
province,
email,
primaryphone
FROM userstable
";
try
{
$stmt = $db->prepare($query);
$stmt->execute();
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
$allusersdetails = $stmt->fetchAll();
第二个数组由查询生成:
$query = "
SELECT
userid
FROM membershipstable
WHERE templateid = :currenttemplateid
";
try
{
$stmt = $db->prepare($query);
$stmt->bindParam(':currenttemplateid', $currenttemplateid);
$stmt->execute();
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
$templateusers = $stmt->fetchAll();
答案 0 :(得分:1)
您可以使用以下一个查询替换2个查询:
$query = "
SELECT
u.id,
u.firstname,
u.lastname,
u.province,
u.email,
u.primaryphone,
(CASE WHEN m.userid IS NULL THEN 0 ELSE 1 END) AS ismember
FROM userstable AS u
LEFT JOIN membershipstable AS m ON
m.templateid = :currenttemplateid AND
u.id = m.userid
";
try
{
$stmt = $db->prepare($query);
$stmt->bindParam(':currenttemplateid', $currenttemplateid);
$stmt->execute();
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
$allusersdetails = $stmt->fetchAll();
这仍会吸引所有用户,无论他们是否为会员,但会将ismember
添加为列。
(AS x
和userstable AS u
的{{1}}部分只是在membershipstable AS m
的持续时间内将该字母指定为表格的别名。基本上,它主要帮助您除了键入外,还允许您SELECT
使用同名列的表。)
欢迎来到结构化查询语言的精彩世界:D
修改强> 并且万一有人来到这里试图完成标题所要求的问题,但是没有碰巧查询数据库但是确实有一个OP的确切格式的数组:
JOIN
答案 1 :(得分:0)
试试这个,
$firstArray = //your first array
$secondArray = // your second array
foreach($firstArray as $fa) {
$id = $fa['id'];
}
foreach($secondArray as $sa) {
$userId = $sa['userid'];
}
if($id === $userID) {
$firstArray['ismember'] = 1;
} else {
$firstArray['ismember'] = 0;
}