2014-03-12 200 views
1

我有以下查询:查询帮助(SQL和PHP)

$lsel_lijst = mysql_query("SELECT * FROM users WHERE (owner = $id AND extern = 0) OR (extern = $id)"); 

这给我的用户,其中所有者= $ ID或其中的extern = $ ID的整个列表。 在这个查询之后,我想从这个列表中指定很多组。 将等级= 10,等级= 20,等级= 30直到2000.
并将它们放在正确的分隔框(方框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)"); 

等 我的问题是我可以做的查询一次,像上面,并选择后来呢?

+0

你能找到答案吗?我会对它的感兴趣。 – paqogomez

回答

0

使用的 “在” 条款:

$lsel_lijst = mysql_query("SELECT * FROM users WHERE level in(10,20,30) AND (owner = $id AND extern = 0) OR (extern = $id)"); 
+0

只有10级用户才能获得列表的代码是什么? – user2519424

0
$lsel_lijst = mysql_query("SELECT * FROM users WHERE (level > 9 OR level < 31) AND (owner = $id AND extern = 0) OR (extern = $id)"); 
+0

然后我有级9向上和下面31. 用户但我需要与用户的列表,包括9级 与用户的另一个列表中与10级 与11级的用户的另一列表。 – user2519424

+0

我认为你将不得不使用for循环来处理这个问题,因为你打算把输出放在单独的div中不是这样吗?喜欢根据查询哪里水平= 10,那么你会想输出到一个ID为10的div? – Rossco

+0

是啊我已经使用循环,但这是sloow,网站滞后于超过100人在线。 – user2519424

0

你可以尝试使用

$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 squery必须适合于批量大小限制其为65,536 *网络数据包大小(大约250MB)。有关最大查询大小的更多信息,请点击此处Limit on the WHERE col IN (...) condition

+0

好的,然后只有10级玩家才能获得什么代码? – user2519424

+0

可以让玩家只在10级的时候在SQL语句中放入“(10)”。当数组为空时,唯一需要处理的是情况。当你发送语句“level in()AND ...”时,你会得到一个SQL错误 - 无效的语法。 – PolishDeveloper

0

选择所有内容,如第一行所示,然后使用关卡参数创建div。

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

} 
else { 
    echo mysql_error(); 
} 
0
while ($row = mysql_fetch_assoc($lsel_lijst)) 
    $list[$row['level']][] = $row; 

这样你就会有一个数组($列表),这将包含许多子阵列由他们的级别中标识:

$list = array(
    1 => array(level1 entries...), 
    2 => array(level2 entries...) 
); 

当心,如果有一个空组(例如没有级别1),$ list数组的索引值为1 null($ list [1] = null)

而且,停止使用“mysql”函数集mysqli或PDO。使用不推荐的扩展名是不好的,非常糟糕。

编辑:看您的评论

是的,我已经使用的循环,但也就是sloow,网站与更多的则有100人落后网上。

提醒关系数据库将始终返回一个“表”(结果集)作为结果。没有可行的方法来使其返回一个数组或不同的结构。这就是为什么获取函数在那里,他们在语言结构(如数组:mysql_fetch_array(),mysql_fetch_assoc())或者作为对象mysql_fetch_object())中转换结果(结果集,行集)。