0

向站点添加一些 php/mysql 数据库查询,但不知道如何构建这个。

该表如下所示:

memberid    1111    1112    1119    1349    1350...
1           1       1       0       0       0
2           0       1       1       0       0
3           1       1       0       0       1
...

列名(1111 等)是视频 ID,0 和 1 表示该成员的队列中是否有该视频。

我的查询需要查看一位成员,并查看他们的队列中有哪些视频。

我打算让我的代码看起来有点像:

$data = mysql_query("SELECT column names FROM queue WHERE memberid = $memberid AND its value = 1", $connection);
if (!$data) {
    die("Database query failed: " . mysql_error());
}

while ($result = mysql_fetch_array($data)) {
    $list[] = $result['columnnames'];
}

帮助!谢谢。-丹尼尔

4

3 回答 3

4

为什么每个视频都有一个专栏?

成员:

CREATE TABLE member (
    member_id INT PRIMARY_KEY,
    name VARCHAR(100)
);

视频:

CREATE TABLE video (
   video_id INT PRIMARY_KEY,
   title VARCHAR(150)
);

成员队列:

CREATE TABLE memberqueue (
    member_id INT,
    video_id INT
);

在他们的队列中获取成员视频:

SELECT video.video_id, video.title
FROM member
JOIN memberqueue
    ON member.member_id = memberqueue.member_id
JOIN video
    ON memberqueue.video_id = video.video_id
WHERE member.member_id = $member_id
于 2012-10-11T00:26:45.533 回答
0

此外,如果您真的想获取列名,请执行以下操作:

SELECT column_name 
FROM information_schema.columns 
WHERE table_schema = 'YOUR_DATABASE_NAME' 
AND table_name = 'YOUR_TABLE_NAME';

当然,这意味着您的 MySQL 用户SELECT需要information_schema.

于 2012-10-11T00:35:03.210 回答
0

像这样的东西应该工作,

SELECT if (`1111`=1 then `1111` else NULL) as `1111`, if (`2222`=1 then `2222` else NULL) as `2222` ... 
FROM queue
WHERE memberid = $memberid

我还没有测试过,所以可能需要一些时间。还有很多更好的方法来处理这样的事情。添加新视频时,您会怎么做?添加新的数据库列?

您是否考虑过拥有一列并将视频存储为一点。然后保持位到视频的映射。

eg.
member_id       videos
1               1010
2               0110

videos table
video_id        bit
1               1000
2               0100
3               0010
4               0001

现在您可以使用会员 ID 选择视频的值。并使用按位运算来确定哪些视频在他们的队列中。

于 2012-10-11T00:24:40.943 回答