<?php
$db = new mysqli(//editted out db credentials);
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
$sql = "SELECT m.ID, m.Title, GROUP_CONCAT(a.Title) AS Artist
FROM mp3s m
LEFT JOIN artist_relations ar ON ar.mp3ID = m.ID
LEFT JOIN artists a ON a.ID = ar.artistID
GROUP BY m.ID
ORDER BY ID
LIMIT 0,30;
";
if($result = $db->query($sql)){
echo "<table>";
while($row = $result->fetch_assoc()){
echo "<tr>";
echo "<td>".$row['Title']."</td>";
echo "<td>".$row['Artist']."</td>";
echo "</tr>";
}
echo "</table>";
}
?>
这个查询工作正常,但速度很慢。
此数据库有3个字段:
`artists` : ID , Title
`mp3s` : ID , Title
`artist_relations` : mp3ID , artistID
我需要这个:
row1: titlemusic1 - artist1 , artist4 , artist5
row2: titlemusic2 - artist1
row3: titlemusic1 - artist3 , artist8
row4: titlemusic1 - artist9 , artist10
...
MP3、artist和artist_relations每个都有超过20000张唱片
EXPLAIN SELECT m.ID, m.Title, .... :
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE m ALL NULL NULL NULL NULL 23718 Using temporary; Using filesort
1 SIMPLE ar ALL NULL NULL NULL NULL 24337
1 SIMPLE a eq_ref PRIMARY PRIMARY 4 ganools_rj.ar.artistID 1
--
如果不存在则创建表artist_relations
(artistid
int(11)NOT NULL,mp3id
int(11)NOT NULL)engine=innoDB默认charset=latin1;
--
如果不存在则创建表artists
(id
int(11)不为NULL AUTO_INCREMENT,title
varchar(155)不为NULL主键(id
)))engine=innoDB DEFAULT charset=latin1 AUTO_INCREMENT=9005;
--
如果不存在mp3s
(id
int(11)NOT NULL AUTO_INCREMENT,title
varchar(155)NOT NULL,imageURL
varchar(155)NOT NULL,mp3url
varchar(155)NOT NULL,description
text,lyric
text,album
varchar(155)DEFAULT NULL,
尝试为artist_relations.mp3id、artist_relations.artistID和mp3s.id创建索引。请参见创建索引
问题内容: 我试图弄清楚如何构建该数据库。之前我已经使用过Apple的核心数据,现在我正在从事另一个需要MySQL的项目。我是MySQL的新手,所以请放轻松。:) 在这个例子中,假设我有三个表,,,和。把它画出来,一个可以有多个s,但是一个只能有一个;每个都有其主键,我需要使用它来获取正确的信息。 那么如何在这里建立这样的关系呢?我听说过创建索引和外键,但不确定它们如何正常工作。 最后,我需要做的
问题内容: 我正在尝试在MySQL数据库中实现“一对一”的关系。例如,假设我有一个Users表和一个Accounts表。我想确保一个用户只能拥有一个帐户。每个用户只能有一个帐户。 我找到了两个解决方案,但是不知道该使用什么,还有其他选择。 第一个解决方案: 在此示例中,我在指向用户主键的帐户中定义外键。然后,我使外键成为唯一键,因此帐户中不能有两个相同的用户。要联接表,我将使用以下查询: 第二种解
对于我正在构建的一个类似论坛的网站,我有PHP类'user'和'post‘。用户有一个帖子数组。如何与关系数据库中的连接相似?在“post”上有一个外键,指向一个“user”?这对我来说是有意义的,因为这是一对一的关系,而“user”到“post”是一对多的,就我所见。欢迎有任何想法-谢谢!
我试图在MySQL数据库中实现“一对一”的关系。例如,假设我有一个Users表和一个Accounts表。我想确保一个用户只能有一个帐户。每个用户只能有一个帐户。 我找到了两个解决方案,但不知道该用什么,还有其他的选择。 在本例中,我定义了指向用户中主键的帐户中的外键。然后我使外键唯一,所以帐户中不能有两个相同的用户。要联接表,我将使用以下查询: null 如果我将这些解决方案中的任何一个导入到My
问题内容: 在课堂上,我们都是“学习”数据库,每个人都在使用Access。厌倦了这一点,我试图做该类其余部分的工作,但是要使用MySQL的原始SQL命令而不是使用Access。 我已经设法创建数据库和表,但是现在如何在两个表之间建立关系? 如果我有两个这样的表: 和 如何在两个表之间创建“关系”?我希望为每个帐户“分配”一个customer_id(以指示谁拥有它)。 问题答案: 如果表是innod
问题内容: 我有两个表:“电影”和“用户”。两者之间存在n:m关系,描述用户观看过哪些电影。这用表格“ seen”描述。现在,我想为给定的用户找出他尚未看过的所有电影。我当前的解决方案是这样的: 这可以正常工作,但扩展性似乎不太好。有更好的方法吗? 问题答案: 这是不使用您显示的子查询方法来执行此查询的典型方法。这可以满足@Godeke的要求,以查看基于联接的解决方案。 但是,在大多数品牌的数据库