2014-03-12 153 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())中轉換結果(結果集,行集)。