要列出的其他表

时间:2013-12-04 18:13:05

标签: php mysql

我的最后一个问题是从两个表格中建立一个列表。

SELECT CONCAT( P.LastName, ', ', P.FirstName ) AS Name, MP.MembershipID, P.PersonID
FROM `person` P
INNER JOIN `membershipperson` MP ON MP.PersonID = P.PersonID
ORDER BY MP.MembershipID DESC 

现在我需要帮助将更多信息添加到列表中。

  1. 我需要一个显示 LastName,FirstName,PersonID,MemberID,LastActiveYear,MemberSince,Approved,LockedOut 的列表。

  2. 如果 LastActiveYear 是<

    ,则批准位为0 2013.我可能想使用一个php mysqli页面,因此我可以根据需要更改年份。

  3. 以下是表格示例;

    person  
    PersonID      LastName    FirstName   
    ----------+------------+------------+---------
    1212            Barr       Foo            
    888             To         Go              
    1415            From       Is             
    
    
    Membershipperson 
    MemberShipID      PersonID
    -------------+------------  
     2250          1212
     1150           888
     3500          1415
    
    users  
    PersonID      Username    IsApproved   LockedOut
    ----------+-------------+-----------+-----------
    1212           2250          1            1
    888            1150          1            0
    1415           3500          0            1
    
    membership
    MemberShipId             LastActiveYear
    ---------------+------------------------
        ####       +          2012
    

    更正并添加了表格。

2 个答案:

答案 0 :(得分:0)

我假设您要求

  • 我需要一个列表,显示LastName,FirstName,PersonID,MemberID,LastActiveYear,MemberSince,Approved,LockedOut.From评论我需要获取一个LastActiveYear低于2013并且已批准的成员列表位是1

在这里你加入你的人员表会员表和用户表我想你已经保持一对一的关系

SELECT 
p.LastName,
p.FirstName,
p.PersonID, 
m.MemberID, 
p.LastActiveYear, 
p.MemberSince, 
u.Approved,
u.LockedOut
FROM person p
INNER JOIN Membershipperson m ON(m.PersonID = p.PersonID)
INNER JOIN users u ON(u.PersonID = u.PersonID)
INNER JOIN membership ms ON(ms.MembershipId = m.MemberID)
WHERE ms.LastActiveYear < '2013'
AND u.Approved =1
GROUP BY u.PersonID

第二个你要求

  • sql代码集如果LastActiveYear是&lt; 2013.我可能想要使用一个php mysqli页面,因此我可以根据需要更改年份。

与在更新查询中加入表并将Approved设置为0

相同
UPDATE users u
INNER JOIN Membershipperson m ON(m.PersonID = u.PersonID)
INNER JOIN  person p ON(p.PersonID = u.PersonID)
INNER JOIN membership ms ON(ms.MembershipId = m.MemberID)
SET u.Approved = 0
WHERE ms.LastActiveYear < '2013'

See Fiddle Updated Fiddle

答案 1 :(得分:0)

假设您将使用php mysqli

//Obviously substitute for you mysql credentials
$mysqli_link = mysqli_connect("localhost","root","pas") or die(mysqli_error($mysqli_link));
//again choose the correct right db
mysqli_select_db($mysqli_link,"database") or die (mysqli_error($mysqli_link));


$query = "SELECT CONCAT( P.LastName, ', ', P.FirstName ) AS Name, MP.MembershipID, ms.LastActiveYear, P.PersonID as personId
FROM `person` P
INNER JOIN `membershipperson` MP ON MP.PersonID = P.PersonID
LEFT JOIN `user` ON P.PersonID=users.PersonID
LEFT JOIN `membership` ms ON MP.MemberShipID=ms.MemberShipID
WHERE users.Approved=1
AND ms.LastActiveYear < 2013
ORDER BY MP.MembershipID DESC";

$result = mysqli_query($mysqli_link, $query);

//To see results
$data = array();
$ids = array();
while ($row = mysqli_fetch_assoc($result)) {
    $data[] = $row;
    $ids[] = $row['personId'];

}

echo'<pre>';
print_r($data);
die('</pre>'); // this will stop the rest of the page from loading

//loop through the results and store the `PersonID`'s in an array called `$ids` (or whatever you want to call it)

$ids = implode(',', $ids);
$ids = substr($ids, 0, -1);
$query = "UPDATE users SET Approved=0 WHERE PersonID IN ($ids)";
mysqli_query($mysqli_link, $query);

希望这有帮助! :)