我想创建一个以这种方式工作的队列系统:
我已经尝试过做这样的事情,但是要创建新请求,消息的数字“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.
答案 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列(id
和user_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)