在HTML / PHP下拉列表中列出带有2个MSSQL表中的值的枚举字符串

时间:2018-08-22 10:40:10

标签: php html sql-server dropdown

我想在下拉列表中列出一个字符串,例如:

名称| IntervallNumber |间隔

需要从2个MSSQL表中填充字符串中的这3个值。现在,我将深入介绍这些表以及我希望在下拉列表中以字符串形式显示的结果。

这是表1:

+-------------+------+
| 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;

输出字符串的详细信息如下:

echo "<option>" . $string . "</option>";
  

首先选择一个选项:“名称2 | 6 | 168,336,500,672,840,100”

     

第二个选择选项:“名称3 | 3 | 168,500,100”

第三个值也必须是字符串。

最大的问题是如何正确声明MSSQL语句并将其组合到枚举中,而不是在SQL列中,因为列是整数并且不能与{{1}一起使用nvarchar }。

有什么建议可以解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

您需要的SQL如下所示:

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,但应改用how-to-make-a-query-with-group-concat-in-sql-server

答案 1 :(得分:1)

更改此查询

    $sql = "SELECT Name FROM table1";
  $sql2 = "SELECT IntervallNumber, Intervall 
  FROM table2 
 WHERE table1.PK_Table1_ID = table2.FK_Table1_ID";

收件人

 $sql = "SELECT a.Name,b.IntervallNumber from table b LEFT JOIN table a on 
 a.PK_Table1_ID = b.FK_Table1_ID WHERE a.PK_Table1_ID = b.FK_Table1_ID";

通过此操作,您可以在下拉列表中获取名称和间隔号

答案 2 :(得分:0)

您可以尝试以下方法:

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测试。