简体   繁体   English

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

[英]List Enum String in HTML/PHP Dropdown with values from 2 MSSQL tables

I want to list a string in my dropdown selection like: 我想在下拉列表中列出一个字符串,例如:

Name | 姓名| IntervallNumber | IntervallNumber | Intervall INTERVALL

This 3 values in the string need to populated from 2 MSSQL tables. 字符串中的这3个值需要从2个MSSQL表中填充。 Now in deep I explain the tables and what results I want in the dropdown as a string. 现在,我将深入介绍这些表以及我希望在下拉列表中以字符串形式显示的结果。

This is table 1: 这是表1:

+-------------+------+
| PK_Table1_ID| Name |
+-------------+------+
|     1       | Name1|
|     2       | Name2|
|     3       | Name3|
+-------------+------+

table 2: 表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   |
+--------------+--------------+-----------------+-----------+

I think I need multiple SQL SELECT statements and merge them together to a string, to populate it for my dropdown. 我想我需要多个SQL SELECT语句并将它们合并到一个字符串中,以填充我的下拉列表。

Maybe something like this: 也许是这样的:

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

The output string should look like in detail like: 输出字符串应如下所示:

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

first select option: "Name2 | 6 | 168,336,500,672,840,100" 首先选择选项:“名称2 | 6 | 168,336,500,672,840,100”

second select option: "Name3 | 3 | 168,500,100" 第二个选择选项:“ Name3 | 3 | 168,500,100”

The 3rd value needs to be a string too. 第三个值也必须是字符串。

The big problem is how to declare the MSSQL statements right and combine it to a enum only in the selction, not in SQL column, because the colums is integer and cant be take nvarchar with the , . 最大的问题是如何声明MSSQL陈述权利,它只是在selction结合到一个枚举,而不是在SQL列,因为colums是整数,不能被取nvarchar,

Any suggestions how I can solve this? 有什么建议可以解决这个问题吗?

The SQL you need will look something like this: 您需要的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

Edit: the above is MySQL , but should instead use something like how-to-make-a-query-with-group-concat-in-sql-server 编辑:上面是MySQL ,但应该改为使用类似的方法来使查询与组concat在SQL服务器中

Change this query 更改此查询

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

To

 $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";

With this you can get the name and the interval number in the dropdown 有了这个你可以在下拉列表中得到名字和间隔号

You may try with this: 您可以尝试以下方法:

T-SQL statement: 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

Output: 输出:

Name2 6 168, 336, 500, 672, 840, 1000
Name3 3 168, 500, 1000

Notes: 笔记:

Tested with SQL Server 2012. 已通过SQL Server 2012测试。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM