2011-03-22 83 views
0

当使用Select语句显示来自Mysql Db的数据时。我得到重复值。如何解决这个问题?我的SQL查询是这样的:连接表时获取重复结果

$sql="SELECT r.hosteladmissionno,r.student_name,r.semester, 
     m.billmonth,m.billyear,m.wastagecharge,b.exp_amount 
    FROM registration r, messexp m, blockexp b 
    WHERE r.mess_type = '".$q."' AND r.mess_type=m.messtype AND r.status_flag=1"; 
+0

请格式化SQL,以便我们不必滚动 – 2011-03-22 06:46:35

+0

我已编辑它.. – Coolbreeze 2011-03-22 06:51:45

+0

在'select'后面使用'DISTINCT'选择' – diEcho 2011-03-22 06:53:32

回答

3

你应该在你的查询中使用内连接。否则登记的每个结果将与messexp的每个结果进行组合...

$sql="SELECT registration.hosteladmissionno, 
    registration.student_name, 
    registration.semester, 
    messexp.billmonth, 
    messexp.billyear, 
    messexp.wastagecharge, 
    blockexp.exp_amount 
FROM registration 
INNER JOIN messexp ON (messexp.id_registration = registration.id) 
INNER JOIN blockexp ON (blockexp.id_messexp = messexp.id) 
WHERE 
registration.mess_type = '".$q."' AND status_flag=1"; 

请注意,(...)将改变这取决于你的架构

+0

谢谢,我会尝试..freye .. id_registration从哪里来? – Coolbreeze 2011-03-22 07:12:26

+1

@Dinzy这是你的模式的假设。通常,要在两个表之间建立关联,您使用的是来自两个表中的一个的id。例如。 Tables => Student(id,lastname,firstname,id_class ...)和Class(id,name,description等)。你有一个学生和一个班级之间的联系。这意味着学生是在id_class – 2011-03-22 07:27:43

+0

由id_class引用类谢谢freyre .. – Coolbreeze 2011-03-22 09:07:44

3

你跨连接的表,所以你得到每一个结果的组合。 连接表的where子句中:

select tab1.column1, table2.column1 
from tab1, tab2 
where tab1.fkColumn = tab2.idColumn 

什么是连接表彼此列?

+0

我已编辑我的问题上面..检查它 – Coolbreeze 2011-03-22 07:08:06

+0

你也必须连接表格blockexp。否则,你会像以前一样交叉加入。 – 2011-03-22 07:15:36