twa*_*wan 5 php sql database arrays
我正在尝试更新数据库中与彼此链接的三个表.
我的表格设置如下:
模板
id
title
id_company
Run Code Online (Sandbox Code Playgroud)
questioncat
id
title
ordering
tid (id of templates)
Run Code Online (Sandbox Code Playgroud)
问题
id
question
catid (id of questioncat)
ordering
Run Code Online (Sandbox Code Playgroud)
templates包含我的问题列表的名称,questioncat包含列表中的所有类别,并questions包含属于某个类别的所有问题.
插入该数据工作正常,我这样做:
首先我的PHP脚本获取一个数组,例如如下所示:
Array
(
[0] => Array
(
[name] => lijsttitle
[value] => Lijst nieuw
)
[1] => Array
(
[name] => category[]
[value] => cat1
)
[2] => Array
(
[name] => sortorder
[value] => 1
)
[3] => Array
(
[name] => question[]
[value] => q1
)
[4] => Array
(
[name] => category[]
[value] => cat2
)
[5] => Array
(
[name] => sortorder
[value] => 2
)
[6] => Array
(
[name] => question[]
[value] => q1
)
)
Run Code Online (Sandbox Code Playgroud)
我检查列表是否已经存在,如下所示:
$check = '
SELECT *
FROM templates
WHERE title = "'.$conn->real_escape_string($title["value"]).'"';
$checkcon = $conn->query($check);
$check = $checkcon->fetch_assoc();
// If there is more than 1 result, update data instead of inserting
if($checkcon->num_rows > 0){
// Else insert data as new list
}else{
// Insert template title and companyid
$inserttemplate = '
INSERT INTO templates (title, id_company) VALUES ("'.$conn->real_escape_string($title["value"]).'","'.$conn->real_escape_string($companyid).'")';
$inserttemplatecon = $conn->query($inserttemplate);
$lastinserted = $conn->inserted_id();
$currCat = '';
$sortorder = '';
foreach($arr as $a) {
$val = $a['value'];
// handle category
if($a['name'] == 'category[]') {
// save cat name
$currCat = $val;
// init questions array
$store[$currCat] = [];
}else if($a['name'] == 'sortorder') {
$sortorder = $val;
$store[$currCat]['sortorder'] = $val;
}else {
// add question to question array
$store[$currCat]['question'][] = $val;
}
}
array_shift($store);
// $key is de waarde van de categorie, $lijst is een array met alles onder de categorie
foreach($store as $keycat => $lijst){
$sortorder = $lijst['sortorder'];
$insertcats = '
INSERT INTO questioncat (title, tid, ordering) VALUES ("'.$conn->real_escape_string($keycat).'", "'.$conn->real_escape_string($lastinserted).'", "'.$conn->real_escape_string($sortorder).'")';
$insertcatscon = $conn->query($insertcats);
$lastinserted1 = $conn->inserted_id();
$questionarr = $lijst['question'];
foreach($questionarr as $q){
$insertquestions = '
INSERT INTO questions (question, catid) VALUES ("'.$conn->real_escape_string($q).'", "'.$conn->real_escape_string($lastinserted1).'")';
$insertquestionscon = $conn->query($insertquestions);
}
}
echo 'Uw lijst is toegevoegd';
}
Run Code Online (Sandbox Code Playgroud)
如果有0个结果,则列表不存在并添加到我的数据库中工作正常,但如果结果超过1,则表示该列表已存在且需要更新.
这是我开始遇到问题的地方.
我可以在一个查询中更新所有三个表吗?
我首先尝试使用if语句中的以下代码更新类别名称(我检查模板列表是否已存在的那个):
foreach($arr as $a) {
$val = $a['value'];
// handle category
if($a['name'] == 'category[]') {
// save cat name
$currCat = $val;
// init questions array
$store[$currCat] = [];
}else if($a['name'] == 'sortorder') {
$sortorder = $val;
$store[$currCat]['sortorder'] = $val;
}else {
// add question to question array
$store[$currCat]['question'][] = $val;
}
$updatetemplate = '
UPDATE questioncat c
INNER JOIN templates t
ON c.tid = t.id
SET t.title = "'.$conn->real_escape_string($title["value"]).'",
c.title = "'.$conn->real_escape_string($currCat).'",
c.ordering = "'.$conn->real_escape_string($sortorder).'"
WHERE t.title = "'.$conn->real_escape_string($getcats['title']).'"
AND c.id = "'.$conn->real_escape_string($getcats["id"]).'"';
$updatetemplatecon = $conn->query($updatetemplate);
echo 'Uw lijst is gewijzigd.';
}
Run Code Online (Sandbox Code Playgroud)
但所有类别标题都是相同的,并且排序也是如此.
是否可以在一个查询中更新三个表?它们基本上是三个级别,模板 - 模板下面的类别 - 类别下面的问题是否可能,如果可能,如何?
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |