2010-03-22 88 views
0

我有两个表:MYSQL - 帮助有更复杂的查询

tbl_liststbl_houses

里面tbl_lists我有一个名为HousesList场 - 它包含了ID的几个房屋的格式如下:

1# 2# 4# 51# 3# 

我需要能够从tbl_houses中选择mysql字段WHERE ID =列表中的任何ID。 更具体地说,我需要SELECT SUM(tbl_houses.HouseValue) WHERE tbl_houses.ID IN tbl_lists.HousesList - 我想这样做,选择tbl_lists中的几行返回SUM

任何人都可以帮忙吗? 我在想如何在单一查询中做到这一点,因为我不想做任何mysql loops(在PHP中)。

+0

我目前正在是这样的: tbl_lists.HousesList LIKE CONCAT( '%',tbl_houses.ID, '#') ..not工作笑...它只是选择列表中的第一条记录 – Joe 2010-03-22 11:32:07

+0

在字段中存储列表通常不是一个好主意。你能改变模式,还是不在你的控制范围之内? – Simon 2010-03-22 11:36:25

+0

我在字段中存储列表以防止需要唯一的字段名称,因为我的项目具有高度动态性。不会改变这一点。不要担心,我只对需要更多动态字段名称的特定事物执行此操作。 – Joe 2010-03-22 11:37:10

回答

0

如果你的模式是真正固定的,我会做两个查询:

SELECT HousesList FROM tbl_lists WHERE ... (your conditions)

在PHP中,拆分列表和创建ID的一个阵列$ houseIDs。然后运行第二个查询:

SELECT SUM(HouseValue) FROM tbl-Houses WHERE ID IN ( .join(“,”,$ houseIDs)。 )

我还是建议更改架构弄成这个样子:

CREATE TABLE tbl_lists (listID int primary key, ...) 
CREATE TABLE tbl_lists_houses (listID int, houseID int) 
CREATE TABLE tbl_houses (houseID int primary key, ...) 

然后查询变得微不足道:

SELECT SUM(h.HouseValue) FROM tbl_houses AS h, tbl_lists AS l, tbl_lists_houses AS lh WHERE l.listID = <your value> AND lh.listID = l.listID AND lh.houseID = h.houseID

在一个字段中存储列表真正阻止你做任何事情在数据库中对他们很有用,并且您将在PHP和数据库之间来回切换。另外(没有违法意图),“我的项目非常有活力”可能是“我没有要求或设计”的不好借口。

+0

谢谢,我会研究这一点。不,我认为每个列表都有单独的表格,但是我最终需要数百个表格来存储ID。这不仅仅是tbl_lists_houses,还有更多...... tbl_lists_boats等等,每个表格也需要不同的字段名称。列表效率更高,但也许我忽略了一些东西。无论如何,再次感谢我会研究这一点。 – Joe 2010-03-22 12:04:25

+0

顺便说一句,我可能最终不需要这个查询,只是单独存储SUMS,因为我需要尽可能避免多个查询调用。 – Joe 2010-03-22 12:06:04