我有两个表:用户和组
在我的“用户”表中,所有用户ID都有一个名为“ID”的列。
在我的表“Groups”中有一个名为“Participants”的列,此列中的字段填充了所有用户id,如“PID_134,PID_489,PID_4784”,并且还有一列标识“ID”特定群体。
现在我想做什么,我想创建一个菜单,显示尚未进入此特定组的所有用户。
所以我需要获取所有用户ID,这些用户ID尚未出现在具有特定ID的组的Participants列中。
如果有一个单独的mysql查询会很酷 - 但任何PHP + MySQL解决方案都没关系。
这是如何工作的?任何猜测?
更新
我知道,这不是代码,但有没有办法可以做到这样的事情,这会让我回复所有用户的列表?
SELECT *
FROM users, groups
WHERE groups.participants NOT LIKE '%PID_'users.id'%' AND groups.id = 1;
答案 0 :(得分:0)
您可以从多个表中进行选择,如下所示:
SELECT * from users, groups WHERE users.id != groups.participants AND groups.id = 1;
这将列出不在组ID 1中的所有用户;通过使用连接可以找到更优雅的解决方案,但这很简单并且可以解决问题。
答案 1 :(得分:0)
我相信这样的事情会有所帮助:
SELECT * FROM users WHERE users.id NOT IN (SELECT groups.participants FROM groups)
但这仅适用于您的数据库规范化。因此,对于您的情况,我只看到PHP + MySQL解决方案。不是很优雅,但它确实有效。
<?php
$participants_array = mysql_query("SELECT participants FROM groups");
$ids = array();
while ($participant = mysql_fetch_assoc($participants_array))
{
$id = explode(',', $participant['participant']);
foreach ($id as $instance)
{
if (!in_array($instance, $ids)) $ids[] = $instance;
}
}
$participants = implode(',', $ids);
$result = mysql_query("SELECT * FROM users WHERE id NOT IN ( $participants )");
但我强烈建议对数据库进行规范化。
答案 2 :(得分:0)
像这样的东西。你刚刚摆脱了ID的“PID_”部分。
SELECT * FROM [users] WHERE [id] NOT IN
(SELECT replace(id,'PID_','') FROM groups WHERE group_name='group1')
Group1将是您的变量 - 您已打开的菜单的组ID /名称。