您好,我试图在我的网站上显示群组名称,但无法同时连接两个查询。用户类在用户表中,而组名在组表中。
我设法从用户表中显示班级用户号,我现在只需要添加第二个查询即可从组中提取组名
这适用于用户的班级编号
$res3 = SQL_Query_exec("SELECT class FROM `users` WHERE id=$posterrid ");
$arr3 = mysqli_fetch_row($res3);
$group = $arr3[0];
应该是
$res3 = SQL_Query_exec("SELECT class FROM `users` WHERE id=$posterrid ");
$res4 = SQL_Query_exec("SELECT level FROM `groups` WHERE group_id=$res3 ");
$arr3 = mysqli_fetch_row($res4);
$group = $arr3;
答案 0 :(得分:2)
我会尝试加入表并直接在1个查询中选择所需的结果。像这样:
"SELECT groups.level FROM groups JOIN users ON groups.group_id=users.class WHERE users.id=$posterrid"
您也可以在2个查询中执行此操作,但是在您的第二个代码段中,第二个查询将$ res3作为参数。 $ res3不是字符串,这就是为什么$ res4 ..行未提供所需结果的原因。您需要先获取结果字符串($ group),然后在第二个查询中使用它。
答案 1 :(得分:0)
过时的请使用联接(In MySQL queries, why use join instead of where?)
就像@Shadol说的那样,您可以直接组合这两个查询。但我会这样:
WordTable = {
{lv = 1, v_random = "LEOHL", v_word = "HELLO"},
{lv = 1, v_random = "GEEINN", v_word = "ENGINE"},
{lv = 1, v_random = "TECHA", v_word = "CHEAT"},
{lv = 2, v_random = "dwIl prEARmgorm", v_word = "WILD PROGRAMMER"},
{lv = 2, v_random = "abDEKory deEPRss", v_word = "KEYBOARD PRESSED"},
}
function tablelength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
function getTypingWord()
local score = 0
local point = 0
index = 1
count = tablelength(WordTable)
tab = WordTable[index]
for index=1,count do
local rdmWord = tab.v_random
local crtWord = tab.v_word
labelWrd.Caption = rdmWord
local mcWord = string.upper(edtWrd.Text)
-- edtWrd is a text box
if mcWord == '' or mcWord == nil then return nil end
if mcWord == crtWord then
showMessage('Great, the answer is '..crtWord)
edtWrd.Text = ''
point = point+1
score = point*200
labelLevel.Caption = 'True : '..point -- a label
labelScore.Caption = 'Score : '..score -- a label
index = index + 1
tab = WordTable[index]
else
showMessage('Try Again')
edtWrd.Text = ''
end
end
end
-- wait user answer till ENTER key has pressed
edtWrd.OnKeyPress = function(sender, key)
if isKeyPressed(VK_RETURN) then getTypingWord() end
return key
end
答案 2 :(得分:0)
这不是正确的方法。您应该执行将用户表和组表联接在一起的单个查询,以便通过单个查询即可获得结果集中所需的数据。
您的问题没有提供诸如表结构之类的重要信息,因此我必须做出有根据的猜测。我必须做的假设:
因此,要在一个查询中获取此信息:
SQL_Query_exec("SELECT g.level as level
FROM `users` u JOIN `groups` g ON (g.group_id = u.class)
WHERE id = $posterrid");
您的主要收获应该是:
您将受益于研究关系数据库设计/数据库规范化以及如何将表连接在一起。
此外,您正在使用的任何数据库类都是过时的,这使您面临SQL注入和转义问题。
您不应将字符串插值用于查询,而应使用参数和预准备语句。