嘿伙计们,我为灯具创建了一个列表。
$result = mysql_query("SELECT date FROM ".TBL_FIXTURES." WHERE compname = '$comp_name' GROUP BY date");
$i = 1;
$d = "Start";
while ($row = mysql_fetch_assoc($result))
{
$odate = $row['date'];
$date=date("F j Y", $row['date']);
echo "<p>Fixture $i - $d to $date</p>";
}
从查询中可以看出,日期显示在fixtures表中。 我的系统工作方式是当一个灯具“播放”时,它将从该表中删除。因此,当整个固定装置完成时,此表中的那一轮将不会有任何日期。他们将在另一张桌子上。
反正我是否可以同时运行其他日期查询,如果结果表中没有日期,则只显示来自fixtures表的日期?
"SELECT * FROM ".TBL_CONF_RESULTS."
WHERE compid = '$_GET[id]' && type2 = '2' ORDER BY date"
这将是第二个查询!
从这里编辑......
无论如何,我可以从两个表中选择日期,然后只有匹配时才使用一个。然后使用日期行(GROUPED BY)填充我的查询?这可能吗?
答案 0 :(得分:2)
听起来你想要UNION两个结果集,类似于以下内容:
SELECT f.date FROM tbl_fixtures f
WHERE f.compname = '$comp_name'
UNION SELECT r.date FROM tbl_conf_results r
WHERE r.compid = '$_GET[id]' AND r.type2 = '2'
GROUP BY date
这应该选择f.date并从r.date中添加尚未包含在结果集中的行(至少这是T-SQL的行为)。显然它可能无法很好地扩展,但有很多博客(搜索:UNION T-SQL)。
答案 1 :(得分:1)
来自this page的说明:
//performs the query
$result = mysql_query(...);
$num_rows = mysql_num_rows($result);
//if query result is empty, returns NULL, otherwise,
//returns an array containing the selected fields and their values
if($num_rows == NULL)
{
// Do the other query
}
else
{
// Do your stuff as now
}
答案 2 :(得分:1)
WHERE compid = '$_GET[id]'
为SQL Injection提供了机会。TBL_FIXTURES
和TBL_CONF_RESULTS
是否应该阅读$TBL_FIXTURES
和$TBL_CONF_RESULTS
?答案 3 :(得分:1)
ChrisF有解决方案!
您可能想到的另一件事是是否有必要执行删除并移动到另一个表。解决此类挑战的常用方法是为每条记录包含一个状态字段,然后不仅仅查询所有where =“x”的查询“all”。例如,1可能是“暂存”,2可能是“正在使用”,3可能是“已使用”或“已存档”在您的示例中,而不是删除字段并将记录“移动”到另一个表(这也是必须在foreach循环中发生,人们会假设你可以简单地将状态字段更新为下一个状态。
因此,您不需要额外的表,每个记录删除一个额外的数据库命中,并从理论上提高应用程序的性能。
答案 4 :(得分:1)
看起来像你想要的是UNION
查询。
$q1 = "SELECT DISTINCT date FROM ".TBL_FIXTURES." WHERE compname = '$comp_name'";
$q2 = "SELECT DISTINCT date FROM ".TBL_CONF_RESULTS.
"WHERE compid = '$_GET[id]' && type2 = '2'";
$q = "($q1) UNION DISTINCT ($q2) ORDER BY date";