查询帮助(Sql和PHP)

查询帮助(Sql和PHP),php,mysql,sql,Php,Mysql,Sql,我有以下疑问: $lsel_lijst = mysql_query("SELECT * FROM users WHERE (owner = $id AND extern = 0 ) OR ( extern = $id )"); 这给了我一个完整的用户列表,其中owner=$id或extern=$id。 在这个查询之后,我想从这个列表中指定很多组。 在2000年之前,水平=10,水平=20,水平=30。 然后把它们放在右边的div框中(框10、框20、框30等) 而不是这样做: $lsel_li

我有以下疑问:

$lsel_lijst = mysql_query("SELECT * FROM users WHERE (owner = $id AND extern = 0 ) OR ( extern = $id )");
这给了我一个完整的用户列表,其中owner=$id或extern=$id。 在这个查询之后,我想从这个列表中指定很多组。 在2000年之前,水平=10,水平=20,水平=30。
然后把它们放在右边的div框中(框10、框20、框30等)

而不是这样做:

$lsel_lijst = mysql_query("SELECT * FROM users WHERE level = 10 AND (owner = $id AND extern = 0 ) OR ( extern = $id )");
$lsel_lijst = mysql_query("SELECT * FROM users WHERE level = 20 AND (owner = $id AND extern = 0 ) OR ( extern = $id )");
$lsel_lijst = mysql_query("SELECT * FROM users WHERE level = 30 AND (owner = $id AND extern = 0 ) OR ( extern = $id )");
等等。 我的问题是,我可以像上面那样再查询一次,然后再选择吗

使用“in”子句:

$lsel\u lijst=mysql\u查询(“从用户中选择*,其中(级别>9或级别<31)和(所有者=$id,外部名=0)或(外部名=$id)”;
您可以尝试使用

$levels = array(10,20,30,40,50,60); //and goes one
$lsel_lijst = mysql_query("SELECT * FROM users WHERE level IN (".implode(',', $levels).") AND (owner = $id AND extern = 0 ) OR ( extern = $id )")

每个SQL查询都必须符合批量大小限制,即65536*网络数据包大小(约250MB)。有关最大查询大小的更多信息,您将在此处找到

按照第一步中的操作选择所有内容,然后使用level参数创建div

if ($lsel_lijst) {
  while($row = mysql_fetch_array($lsel_lijst)) {
     <!-- write your div code here <div className="divLevelnumber" -->
  }

}
else {
  echo mysql_error();
}
if($lsel_-lijst){
while($row=mysql\u fetch\u数组($lsel\u lijst)){
}
}
否则{
echo mysql_error();
}
通过这种方式,您将拥有一个数组($list),其中包含许多按级别标识的子数组:

$list = array(
    1 => array(level1 entries...),
    2 => array(level2 entries...)
);
注意,如果有一个空组(例如没有级别1),$list数组的值在索引1 null($list[1]=null)

并且,停止使用“mysql”函数集,而是(如果可能的话)使用mysqli或PDO。使用不推荐使用的扩展是不好的,非常糟糕

编辑:查看您的评论


是的,我已经使用了循环,但这是一个缓慢的过程,网站的在线人数已经超过了100人


请注意,关系数据库将始终返回一个“表”(结果集)作为结果。没有切实可行的方法使其返回数组或不同的结构。这就是fetch函数存在的原因,它们将您的结果(结果集、行)转换为语言结构(如数组:mysql\u fetch\u array()、mysql\u fetch\u assoc()。或作为对象mysql\u fetch\u object())。

那么,只有级别为10的用户才能获得列表的代码是什么?那么,级别为9的用户在31以上。但是我需要一个9级用户的列表。另一个包含10级用户的列表。另一个11级用户列表。我想你必须使用for循环,因为你想把输出放在单独的div中,不是吗?比如根据level=10的查询,你会想把输出放入一个id为10的div中?是的,我已经使用了循环,但这是为了拖延,网站的在线人数超过了100人。好的,那么只获得10级玩家的代码是什么?只获得10级玩家,你只需要输入“in(10)”在SQL语句中。唯一需要注意的是数组为空时的情况。当您发送语句“level in()AND…”时,您将收到一个SQL错误-无效语法。您能找到这个问题的答案吗?我很想知道那是什么。
if ($lsel_lijst) {
  while($row = mysql_fetch_array($lsel_lijst)) {
     <!-- write your div code here <div className="divLevelnumber" -->
  }

}
else {
  echo mysql_error();
}
while ($row = mysql_fetch_assoc($lsel_lijst))
    $list[$row['level']][] = $row;
$list = array(
    1 => array(level1 entries...),
    2 => array(level2 entries...)
);