我正在尝试获取MySQL报告,但什么都没得到。请指出有什么问题?我检查了类似的question,但无法找到解决问题的方法。
+----+-----+----------+---------+-----------+-----------+ | pk | ind | opt_type | name | opt_type1 | opt_type2 | +----+-----+----------+---------+-----------+-----------+ | 1 | 1 | group_1 | Green | - | - | | 2 | 1 | group_1 | Red | - | - | | 3 | 1 | group_2 | Cloth | - | - | | 4 | 1 | group_3 | Shirt | 1 | 3 | | 5 | 1 | group_4 | Table | 2 | - | +----+-----+----------+---------+-----------+-----------+
name | colour | material ------+--------+--------- Shirt | Green | Cloth Table | Red |
SELECT
o.name
, o1.name as colour
, o2.name as material
FROM $options as o
LEFT JOIN $options AS o1 ON o1.opt_type1 = o.pk
LEFT JOIN $options AS o2 ON o2.opt_type2 = o.pk
WHERE o.ind=$ind
AND o1.ind=$ind
AND o2.ind=$ind
LOOP{
echo $name ." ". $colour ." ". $material;
}
答案 0 :(得分:3)
这个数据模型对我来说太可怕了。但无论如何,如果你想要加入一个表,不要在WHERE
子句中加上标准。外连接记录的所有值都设置为null,因此对于这样的记录,o2.ind=$ind
永远不会为真。你最终得到了一个内部联接,从而解雇了整行。将您的加入条件改为ON
子句。
您还混淆了连接中的ID。 o
是您的主要选择(例如'衬衫')o1
是它的第一个选项(即颜色,例如' Green'),所以它必须是{ {1}},而不是o1.pk = o.opt_type1
。
o1.opt_type1 = o.pk