Sql 如何在一个查询中检索一个表中的记录和另一个表中的相关记录?
我有两张桌子,items和itemmeta。items具有item_id,该id将其链接到itemmeta,itemmeta id具有itemmeta_id、item_id、meta_键和meta_值。如果我需要为一个项目添加一个特殊的标志或值,我就这样做了,而不必一直更改items表 现在我为灵活性付出了代价。我想知道我是否可以将一个查询和一些php组合成一个设计更好的查询 首先,我会这样做:Sql 如何在一个查询中检索一个表中的记录和另一个表中的相关记录?,sql,mysql,join,Sql,Mysql,Join,我有两张桌子,items和itemmeta。items具有item_id,该id将其链接到itemmeta,itemmeta id具有itemmeta_id、item_id、meta_键和meta_值。如果我需要为一个项目添加一个特殊的标志或值,我就这样做了,而不必一直更改items表 现在我为灵活性付出了代价。我想知道我是否可以将一个查询和一些php组合成一个设计更好的查询 首先,我会这样做: SELECT * FROM items; 然后,在循环浏览这些内容时,我在php中对每一个都这样做
SELECT * FROM items;
然后,在循环浏览这些内容时,我在php中对每一个都这样做:
$sql = "SELECT * FROM itemmeta WHERE item_id='".$item['item_id']."' ";
$meta_result = mysql_query($sql, $conn) or die(mysql_error());
$item['meta'] = array();
while( $meta=mysql_fetch_assoc($meta_result) ) {
$item['meta'][$meta['meta_key']] = $meta['meta_value'];
}
第二部分可以使用子查询或类似的东西吗?我认为最困难的部分是保持相同的输出。例如:$item['meta']['my_key']='value'。我假设更多的是$item['meta'][0][0]='my_key'和$item['meta'][0][1]='value'
选择*from items,itemmeta,其中items.id=itemmeta.item\u id
您想使用
连接
:
SELECT i.*, im.* -- note you should really specify exactly which columns you want
FROM items AS i
JOIN itemmeta AS im
ON i.item_id = im.item_id
资源:
- 在MySQL手册中
应该可以工作您可以将所有内容合并到一个查询中,但这会使客户端代码复杂化。如果使用以下查询:
SELECT * FROM items
LEFT JOIN itemmeta USING (item_id)
然后,客户端代码必须在item\u id
更改时进行循环检查。对于第一行和项目已更改的行,您需要执行以下操作:
项
表中的字段itemmeta
字段是否有非空条目,如果有,则进行处理itemmeta
字段,直到出现新项除了上面给出的具体答案之外,我还推荐一本关于SQL的好书。如果您刚刚学习了连接,那么您应该学习SQL的许多其他重要元素。你刚刚触及了表面 我一直喜欢艾伦·泰勒的傻瓜SQL。尽管这是一本傻瓜书,但它是对这些概念的一个很好的介绍,这些概念对SQL非常重要
$sql = "SELECT * FROM items JOIN itemmeta ON items.id = itemmeta.item_id";
$rs = mysql_query($sql);
$item['meta'] = array();
while($row = mysql_fetch_assoc($rs)) {
$item['meta'][$row['meta_key']] = $row['meta_value']
}
SELECT * FROM items
LEFT JOIN itemmeta USING (item_id)