我觉得这个表结构合理。
方法一、
查询的时候分步查询,先查 TB_wupin,得到 wup_id 后,再查TB_peijian
方法二、
一次查询:select * from TB_wupin as w,TB_peijian as p where w.wu_id=p.pei_wupin_id
得到结果集,处理后再显示

解决方案 »

  1.   

    select * from tb_wupin, tb_peijian where tb_wupin.wup_id = tb_peijian.pei_wupin_id
      

  2.   

    先列出物品,再相应的每一个物品
    select * from TB_peijian where pei_wupin_id=wup_id
    建议你使用英文名称建表
      

  3.   

    个人认为在建表时TB_wupin以wup_id为主建,TB_peijian中以wup_id为外部建.这样有助于将两个表有机的结合起来.
    至于查询就简单了.
      

  4.   

    你的表设计比较合理,你的查询结果用 MySQL 的用户变量 也可以完全做到,请看手册中 用户变量 的说明:6.1.4 用户变量MySQL 支持连接特定(connection-specific)的用户变量,用 @variablename 句法表示。一个变量名可以由当前字符集中包含的文字与数字字符以及 “_”、“$” 和 “.” 组成。缺少的字符集为 ISO-8859-1 Latin1;这可以通过改变 mysqld 的--default-character-set 的选项来改变。查看章节 4.6.1 用于数据和排序的字符集。 变量不必被初始化。缺省地,他们的值为 NULL 并可以存储一个整数、实数或字符串值。当连接线程退出时,这个线程的所有变量将会自动地被释放。 你可以通过 SET 句法来设置一个变量: SET @variable= { integer expression | real expression | string expression }
    [,@variable= ...].在语句中除了 SET 之外还可以直接为一个变量赋值。然而在这各情况下,赋值操作符为 := 而不是 =,因为 = 在非 SET 语句中是用于比较的: mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
    +----------------------+------+------+------+
    | @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2  | @t3  |
    +----------------------+------+------+------+
    |                    5 |    5 |    1 |    4 |
    +----------------------+------+------+------+用户变量可以用于表达式所允许的任何地方。注意,这在数字必须明确指定的语境中并不适用,例如,在 SELECT 的 LIMIT 子句中或一个 LOAD DATA 语句的 IGNORE number LINES 的子句中。注意:在一个 SELECT 语句中,各个表达式只有在它被送到客户端时才能被求值。这就意味着,在 HAVING、GROUP BY 或 ORDER BY 子句中,你不能使用一个包含在 SELECT 部份所设置变量的表达式。例如:下面的语句将不会按预期的运作: mysql> SELECT (@aa:=id) AS a, (@aa+3) AS b FROM table_name HAVING b=5;原因是因为 @aa 不会是当前行的值,而是前一个符合条件的行的 id 值。 规则就是在同一语句中决不赋值 和 使用同一个变量。 
      

  5.   

    gaochao79 是鄙视我吗?
    请问出于什么原因?