创建一个队列系统

时间:2017-11-11 19:07:44

标签: php mysql

我想创建一个以这种方式工作的队列系统:

  • 用户填写表格,他们必须输入一些数据。
  • 点击发送,这些数据将保存在sql表中。
  • 转到index.php页面会看到一个包含如下文本的框:您面前有4个请求,请等待几分钟。

我已经尝试过做这样的事情,但是要创建新请求,消息的数字“4”会增加。 这是因为我创建了一个查询表中所有结果的查询。

<Button android:id="@+id/button" style="@style/buttonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:layout_marginStart="16dp" android:onClick="@{handler::onButtonClick}" android:text="@string/button_send" app:layout_constraintBaseline_toBaselineOf="@+id/editText" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/editText" />

虽然我希望它只计算发送用户的请求之上的结果。

$query = $mysql->query("SELECT COUNT(*) AS q FROM application_approve");

在上面的示例中,我想只计算“第二个请求”上方有多少行:在这种情况下为1.

1 个答案:

答案 0 :(得分:1)

假设您的表具有PK(id)并引用user_id来标识哪个请求属于哪个用户,并假设每个用户的队列中只有一个请求,那么您的查询将会看起来像下面这样。

SELECT COUNT(id) AS q FROM application_approve
    WHERE id < (
        SELECT id FROM application_approve
        WHERE user_id = ?
    )

这也假设PK id是一个自动递增的密钥。

给定user_id此查询将返回给定用户行上方的行数(假设他们有一个)。或者,换句话说,所有id都小于给定用户的id。

为简单起见,我们假设此架构只有2列(iduser_id):


mysql> SELECT * FROM application_approve;
+------+---------+
| id   | user_id |
+------+---------+
|    1 |       1 |
|    2 |       2 |
|    3 |       3 |
+------+---------+
3 rows in set (0.00 sec)

因此在给定的表中,有3个用户,每个用户在队列中有1个条目。

如果我们想要查找用户2在查询中的位置,则会给出以下结果:

mysql> SELECT COUNT(id) AS q FROM application_approve WHERE id < (SELECT id FROM application_approve WHERE user_id = 2);
+---+
| q |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
相关问题