如何基于子查询构建php表单?

如何基于子查询构建php表单?,php,mysql,Php,Mysql,我正在建立一个MySQL音乐数据库,它使用我必须在php表单上构建很多函数来获取数据库中的数据并以特定的方式输出 其中一个功能是列出艺术家表演的所有巡回演出日期。我还没有写完这一页,这就是为什么我要征求一些想法来帮助我设计一个基础来建立这个 我打算这样做的方式是让用户查看预设的艺术家列表,一旦他们突出显示他们的特定艺术家并单击按钮,页面就会加载并显示链接到该艺术家的相应巡演日期 数据库中特定表的链接方式如下所示 巡更表 此表包含艺术家id,并列出了特定艺术家正在进行的所有巡演。(注:此表包含巡演

我正在建立一个MySQL音乐数据库,它使用我必须在php表单上构建很多函数来获取数据库中的数据并以特定的方式输出

其中一个功能是列出艺术家表演的所有巡回演出日期。我还没有写完这一页,这就是为什么我要征求一些想法来帮助我设计一个基础来建立这个

我打算这样做的方式是让用户查看预设的艺术家列表,一旦他们突出显示他们的特定艺术家并单击按钮,页面就会加载并显示链接到该艺术家的相应巡演日期

数据库中特定表的链接方式如下所示

巡更表

此表包含艺术家id,并列出了特定艺术家正在进行的所有巡演。(注:此表包含巡演,巡演日期a是其中的一部分)

表格巡更日期

此表包含巡演日期,巡演中的日期,我想引用特定艺术家将要进行的所有巡演日期(Tourdate链接到巡演,因此Tourdate中没有直接链接的艺术家id。它通过巡演连接)

我已经设置了一个子查询,可以根据艺术家id集获取特定的旅游日期。但是我需要将它合并到一个php/html文件中,用户可以与之交互

SELECT td.Tour_Date 
FROM tbl_Tourdate td 
WHERE td.Tour_id=(SELECT t.Tour_id 
FROM tbl_Tour t 
WHERE t.Artist_id=2)
但是,我需要围绕此构建一个表单,供用户简单使用。所以我需要一些方法来列出艺术家的名字,然后当点击时,它会在表单上生成一个与他们点击的艺术家链接的巡演日期列表。我不知道从哪里开始设置此表单。所以我想知道我是否能得到一些关于如何构建它的建议或想法


首先,如果您希望使用两个表并使用连接条件而不是子查询,那么您可以使用单个查询,因为这样您可以在一个查询中获得所有数据,这应该更容易放入PHP变量

但这两个表中的数据肯定可以合并成一个表

这也将删除子查询。有两张这样的表对我来说似乎没用,为什么不能在“巡演日期”表中列出巡演名称、日期和艺术家ID?将所有与旅游相关的数据放在一个表中

然后您可以进行如下简单查询:

SELECT Tourdate_id, Tour_Date, Country, Town, Venue
FROM tbl_Tourdate
WHERE artist_id = $id;
$tours = mysqli_query($dbdb, "SELECT Tourdate_id, Tour_Date, Country, Town, Venue FROM tbl_Tourdate WHERE artist_id = 'x'");
<table>
    <thead>
        <tr>
            <th>Date</th>
            <th>Country</th>
            <th>Town</th>
            <th>Venue</th>
        </tr>
    </thead>
    <tbody><?
        while(list($Date, $Country, $Town, $Venue) = mysqli_fetch_row($tours)){

            echo"<tr>";
                echo"<td>".$Date."</td>";
                echo"<td>".$Country."</td>";
                echo"<td>".$Town."</td>";
                echo"<td>".$Venue."</td>";
            echo"</tr>";
        } ?>
    </tbody>
</table>
然后使用PHP循环+HTML表,如下所示:

SELECT Tourdate_id, Tour_Date, Country, Town, Venue
FROM tbl_Tourdate
WHERE artist_id = $id;
$tours = mysqli_query($dbdb, "SELECT Tourdate_id, Tour_Date, Country, Town, Venue FROM tbl_Tourdate WHERE artist_id = 'x'");
<table>
    <thead>
        <tr>
            <th>Date</th>
            <th>Country</th>
            <th>Town</th>
            <th>Venue</th>
        </tr>
    </thead>
    <tbody><?
        while(list($Date, $Country, $Town, $Venue) = mysqli_fetch_row($tours)){

            echo"<tr>";
                echo"<td>".$Date."</td>";
                echo"<td>".$Country."</td>";
                echo"<td>".$Town."</td>";
                echo"<td>".$Venue."</td>";
            echo"</tr>";
        } ?>
    </tbody>
</table>
$tours=mysqli\u query($dbdb,“从tbl\u Tourdate中选择Tourdate\u id、Tour\u日期、国家、城镇、地点,其中艺术家\u id='x');
日期
国家
城镇
地点
$dbdb需要是mysqli\u connect构造

查询中的$id可以来自输入表单,也可以来自另一个PHP页面的GET请求


总之,这只是一个想法。

我将从创建表单布局开始,一个非常简单的开始是:

<form action="lookup.php" method="post">
    <input type="text" name="artist">
    <input type="submit">
</form>

这会将艺术家的名字发送到lookup.php脚本,您将在该脚本上应用您的工作sql查询,该查询将返回一个数组,该数组随后将以您喜欢的任何方式打印,@ScottSmudger answer完成实际打印带有查询结果的表的过程


这是一种非常基本的入门方法,当然,稍后您希望进一步迭代,并在下拉列表中填入艺术家的姓名,然后通过ajax执行查找并返回json数组,这将导致更加完美的用户体验。

请更清楚地说明这一点:巡演列表应该显示什么?我知道它是在形式上的,但是人们必须能够用它做任何事情吗你是说他们可以同时选择多个艺术家吗?在这种情况下,列表会发生什么变化?不,它只是一种单击艺术家姓名的方法,然后它会简单地列出他们所有的链接巡演日期。我认为当你可以编写这样的查询时,你就可以执行这样的任务了。还是说不允许先刷新页面?在这种情况下,我们谈论的是ajax(javascript/jquery)。如果允许该页面刷新,则只需使用php即可。至于艺术家的名字,我建议使用
select
元素。你可以在上面放一些类似select2的东西,让人们在里面搜索。-很抱歉,我只是不太清楚。我将以一种信息量更大的方式重新编写:)我正要用一种不需要重新加载页面的解决方案来回答。然而,我很累,而其他人只是给出了一个看起来不错的答案,所以我就到此为止。如果你想在不重新加载页面的情况下进行操作,请发表评论,我会为你写一些东西。与其让它引用外部文件,不如让sql查询放在同一个文件中,只是用php代码括起来?我认为Php代码在显示时是不可见的。@JackRogers当然,只要从action属性中删除lookup.Php,就会导致POST请求(在本例中,是艺术家的名字)被发送到同一页面。然后,如果(isset($\u POST['artist']){//executemysql query here}类似这样的话,您可能会这样做
在WHERE子句中,确保使用从上一个表单获得的值更改艺术家id,否则,您将始终获得艺术家id 2的巡演日期。上一个表单是什么意思?都是一样的,不是吗?