在HTML/PHP下拉列表中列出枚举字符串以及来自2个MSSQL表的值
我想在下拉选择中列出一个字符串,如: 名称|间隔编号|间隔 字符串中的这3个值需要从2个MSSQL表中填充。现在,我将深入解释这些表,以及我希望在下拉列表中以字符串形式显示的结果 这是表1:在HTML/PHP下拉列表中列出枚举字符串以及来自2个MSSQL表的值,php,html,sql-server,dropdown,Php,Html,Sql Server,Dropdown,我想在下拉选择中列出一个字符串,如: 名称|间隔编号|间隔 字符串中的这3个值需要从2个MSSQL表中填充。现在,我将深入解释这些表,以及我希望在下拉列表中以字符串形式显示的结果 这是表1: +-------------+------+ | PK_Table1_ID| Name | +-------------+------+ | 1 | Name1| | 2 | Name2| | 3 | Name3| +-------------+-
+-------------+------+
| PK_Table1_ID| Name |
+-------------+------+
| 1 | Name1|
| 2 | Name2|
| 3 | Name3|
+-------------+------+
表2:
+--------------+--------------+-----------------+-----------+
| PK_Table2_ID | FK_Table1_ID | IntervallNumber | Intervall |
+--------------+--------------+-----------------+-----------+
| 1 | 2 | 1 | 168 |
| 2 | 2 | 2 | 336 |
| 3 | 2 | 3 | 500 |
| 4 | 2 | 4 | 672 |
| 5 | 2 | 5 | 840 |
| 6 | 2 | 6 | 1000 |
| 7 | 3 | 1 | 168 |
| 8 | 3 | 2 | 500 |
| 9 | 3 | 3 | 1000 |
+--------------+--------------+-----------------+-----------+
我想我需要多个SQL SELECT语句,并将它们合并到一个字符串中,以填充下拉列表
也许是这样的:
$sql = "SELECT Name FROM table1";
$sql2 = "SELECT IntervallNumber, Intervall
FROM table2
WHERE table1.PK_Table1_ID = table2.FK_Table1_ID";
$seperator = " | ";
$string = $sql . $seperator . $sql2;
SELECT CONCAT(Name, ' | ', MAX(IntervallNumber), ' | ', GROUP_CONCAT(Intervall))
FROM table1 t1
JOIN table2 t2 ON t1.PK_Table1_ID = t2.FK_Table1_ID
GROUP BY t1.PK_Table1_ID
输出字符串应详细如下所示:
echo "<option>" . $string . "</option>";
第一个选择选项:名称2 | 6 | 168336500672840100
第二个选择选项:名称3 | 3 | 16850100
第三个值也必须是字符串
最大的问题是如何正确声明MSSQL语句,并将其仅在SELECT中组合到enum,而不是在SQL列中,因为列是整数,不能与、、一起使用nvarchar
有什么建议可以解决这个问题吗 您需要的SQL将如下所示:
$sql = "SELECT Name FROM table1";
$sql2 = "SELECT IntervallNumber, Intervall
FROM table2
WHERE table1.PK_Table1_ID = table2.FK_Table1_ID";
$seperator = " | ";
$string = $sql . $seperator . $sql2;
SELECT CONCAT(Name, ' | ', MAX(IntervallNumber), ' | ', GROUP_CONCAT(Intervall))
FROM table1 t1
JOIN table2 t2 ON t1.PK_Table1_ID = t2.FK_Table1_ID
GROUP BY t1.PK_Table1_ID
编辑:上面是MySQL,但应该使用类似于更改此查询的内容
$sql = "SELECT Name FROM table1";
$sql2 = "SELECT IntervallNumber, Intervall
FROM table2
WHERE table1.PK_Table1_ID = table2.FK_Table1_ID";
到
使用此功能,您可以在下拉列表中获取名称和间隔编号,您可以尝试以下操作:
T-SQL语句:
SELECT
A.name,
IntervallNumber = MAX(IntervallNumber),
Intervall = STUFF((
SELECT ', ' + CONVERT(VARCHAR(MAX), X.Intervall)
FROM Table2 X
WHERE B.FK_Table1_ID = X.FK_Table1_ID
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, '')
FROM Table1 A
JOIN Table2 B ON A.PK_Table1_ID = B.FK_Table1_ID
GROUP BY B.FK_Table1_ID, A.name
输出:
Name2 6 168, 336, 500, 672, 840, 1000
Name3 3 168, 500, 1000
注:
使用SQL Server 2012进行了测试。确定以及如何获取列“intervall”所有值以及下拉列表中名称和IntervallNumber旁边的相同FK_Table1_ID枚举?$SQL=选择a.NAME+|+b.IntervallNumber+| b.intervall从表b左连接表a到a.PK_Table1_ID=b.FK_Table1_ID,其中a.PK_Table1_ID=b.FK|Table1|ID;我尝试了链接中的代码,但出现了错误:选择rop.PK_Table1_ID,rop.Name,ropp.IntervallNumber,Intervall=STUFF SELECT','+ropp.Intervall,从Table2 ropp中选择rop.PK_Table1_ID=ropp.FK_Table1_ID作为XML路径,TYPE.value','NVARCHARMAX',1,1,从表1 rop JOIN table2 ropp ON rop.PK_Table1_ID=ropp.FK_Table1_ID按rop.NAME排序这就是为什么我说的将看起来像这样,然后链接到替换组的位置_CONCAT,很抱歉我目前无法调试sql server OK我看到了问题解决方案对我没有用,因为它只考虑基于sql的输出结果,如果列是nvarchar,但最后一列Intervall是int,那么我不能在她的内部枚举它。所以我需要一个组合在PHP中的soloution字符串您的SQL server版本是什么?通常的经验法则是,总是有一个SQL语句来代替合并两个选择。SQL查询功能非常强大。完美,这就是我要找的。谢谢你,先生。