php - 按投票排序 - PHP

标签 php mysql sql database voting

我有一个投票脚本,可以提取每个用户的投票数。

一切正常,除了我现在需要按票数顺序显示每个用户的票数。请查看我的数据库结构:

条目:

UserID, FirstName, LastName, EmailAddress, TelephoneNumber, Image, Status

投票:

item, vote, nvotes

项目字段包含vt_img,然后是UserID,例如:vt_img4,并且vote和nvotes都显示投票数。

有什么想法可以将它们联系起来并按照投票最多的顺序在顶部显示用户吗?

谢谢

最佳答案

您确实需要更改投票表的结构,以便可以进行正常的连接。我强烈建议添加一个纯 userID 列,或者至少不要将其连接为其他两个列。根据 ID,您可以轻松执行以下操作:

select
    a.userID,
    a.firstName,
    b.votes
from
    entries a
        join voting b
            on a.userID=b.userID
order by
    b.votes desc

另一种选择是考虑(如果是一对一关系)简单地将数据合并到一个表中,这将使其变得更加容易。

目前,这确实是一个 XY问题,您正在寻找一种方法来连接两个不应该连接的表。虽然有(可怕的、可怕的、可怕的)方法可以做到这一点,但我认为最好的解决方案是做一些额外的工作并改变你的数据库(我们当然可以帮助你,这样你就不会丢失任何数据),然后您将能够(轻松地)做您现在想做的事情,并且您将来想做的所有其他事情(您现在不知道的)将会非常多更容易。

编辑:这似乎是使用触发器为您插入新行的绝佳机会。 MySQL 触发器是当某个预定义操作发生时数据库将执行的操作。在这种情况下,当您向主表中插入一行时,您希望向表中插入一个新行。美妙之处在于您可以使用对原始表中数据的引用来完成此操作:

CREATE TRIGGER Entries_Trigger AFTER insert ON Entries
    FOR EACH ROW BEGIN
        insert into Voting values(new.UserID,0,0);
    END;

这将以以下方式工作 - 当一行插入到 Entries 表中时,数据库将插入该行(创建 auto_increment ID 等),然后立即调用此触发器,然后它将使用/em> 新创建的 UserID 插入到第二个表中(以及一些用于投票和 nvotes 的零)。

关于php - 按投票排序 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12420536/

相关文章:

php - 在 Windows Server 2008 R2 上托管 php 应用程序

java - Java 中的 PHP time() 相当于什么?

mysql - 在Mysql中查找字符串值中的最大值

sql - Linux 上的 Postgres 文字回车错误

SQL Server 2008 连接问题

php - 我可以 "use"来自 PHP 交互式 Shell 中必需/包含文件的命名空间吗?

php - 如何使用特定的 UTC 更改时区 laravel 5.4 版

php - 使用 Codeigniter 闭包表显示分层数据

mysql - cocoa objective-c : How can connect to mysql database?

SQL 选择 COUNT(*) > 最小数量