如何在sql中使用多个查询

时间:2017-12-07 17:27:41

标签: mysql sql

我想在一个查询中显示count和row表,但是当我运行它时,它显示0行,并且它不显示计数。

   <?php

   include "connect_db.php";
   $query = "SELECT COUNT(*) AS numberOfRows FROM wp_cf7_data, wp_cf7_data_entry WHERE wp_cf7_data.id=wp_cf7_data_entry.data_id and cf7_id = 1470 AND name = \"your-name\" and wp_cf7_data.created BETWEEN '2017-11-27 08:54:39' and '2017-12-03 08:54:39'
   UNION
   SELECT * FROM wp_cf7_data, wp_cf7_data_entry WHERE wp_cf7_data.id=wp_cf7_data_entry.data_id and cf7_id = 1470 AND name = \"your-name\" and wp_cf7_data.created BETWEEN '2017-11-27 08:54:39' and '2017-12-03 08:54:39'
   ";





   $result = mysqli_query($conn, $query);

   if (mysqli_num_rows($result) > 0) {
       // output data of each row
       while($row = mysqli_fetch_assoc($result)) {
         echo $row['numberOfRows'];
           echo "id: " . $row["id"]. " - Name: " . $row["cf7_id"]. " " . $row["name"]. "<br>";

       }
   } else {
       echo "0 results";
   }

   mysqli_close($conn);
   ?>

2 个答案:

答案 0 :(得分:0)

你的查询似乎有可能是错误的...因为在两个选择中你可能没有相同数量的列用于联合尝试使用相应数量的列sin和查询

ID  CID CalendarEventID StudentUserID Attendance
1   1   1               1             Attended Late
2   1   1               1             Attended Late
3   1   1               1             Attended Late
4   1   1               1             Attended Late
5   1   1               1             Attended Late
6   1   1               1             555
7   1   1               1             555
8   1   1               1             555
9   1   1               1             555

&#34 ;;

答案 1 :(得分:0)

我的猜测是你从MySQL那里得到了一个错误,你没有捕获(这是你应该检查的东西,因为你的代码一般应该用来处理错误。

这里的问题是你试图UNION两个没有相同列的结果集。 COUNT(*)是一个整数列,而SELECT *将返回多列。

相反,只需在UNION之后使用第二个查询(删除整个SELECT COUNT(*)),然后使用mysql_num_rows检查结果集中的计数。我不用php编程,但我相信你可以通过快速谷歌搜索找到如何使用它的例子。

其他一些快速说明:

永远不要使用SELECT *。总是列出你希望返回的列表。如果您使用SELECT *,那么您的代码不仅不清楚,而且如果表格设计在任何时候发生变化,它将突然破坏您的所有代码。

此外,请使用明确的JOIN s(INNEROUTER视情况而定)。不要只将表放在FROM子句中。