2012-10-11 58 views
0

向一个站点添加一些php/mysql数据库查询,但不知道如何构建这个。在mysql/php中选择列名称

表看起来像:

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,以及零的和个代表成员中是否有自己的队列或不是视频。

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

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

$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']; 
} 

帮助!谢谢。 -Daniel

+0

您的列名是数据库中其他条目的ID?那么您是为每个新视频添加一个新列?请注意,这是一个总的数据库结构规范化失败。 – deceze

+0

我想如果我不得不维护这个程序,我会为开发人员写死亡威胁。总SQL失败。 –

回答

4

为什么你会为每个视频都有一个列?

会员:

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

视频:

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

MemberQueue:

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 
+0

+1这是做到这一点的方法。 – shapeshifter

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 

现在您可以选择视频的价值usign成员id。并使用按位操作来确定哪些视频在其队列中。

0

此外,如果你真的想要得到的列名,这里是如何做到这一点:

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

当然,这意味着你的MySQL用户需要为information_schemaSELECT特权。