是一个手机软件库,每个软件有自己的id,名称等,软件的属性是可以动态添加的,比如键盘,分辨率,平台等;每个属性可以动态添加参数,比如键盘属性下面的参数是全键盘,无键盘,标准键盘;分辨率属性下面的参数是240x320,480x800等等,管理员可以从后台增加属性和参数。软件对应的参数可以多选,比如某个软件的分辨率属性是240x320,320x240都能支持。管理员要能够根据属性和参数来列出符合的软件列表,比如支持240x320并且也支持320x240分辨率,全键盘的软件;或者除240x320分辨率以外并支持触摸屏和标准键盘的软件。以上是需求,我按通常的做法设计的表格,查询搞不定,请指教。我分为4个表
软件表 s_id,s_name
属性表 p_id,p_name
参数表 v_id,v_name,p_id
软件属性参数对应表 s_id,p_id,v_id

解决方案 »

  1.   

    软件属性参数对应表 s_id,p_id,v_id-->
    软件属性对应表
    属性参数对应表 什么查询搞不定
      

  2.   

    表 结构应该可以,
    贴建表及插入记录的SQL,及要求结果出来看看
      

  3.   

    有些查询不会写啊,比如我上面说的 管理员要能够根据属性和参数来列出符合的软件列表,比如支持240x320并且也支持320x240分辨率,全键盘的软件;或者除240x320分辨率以外并支持触摸屏和标准键盘的软件,这个怎么查,哪位大虾给写个查询语句,学习一下。
      

  4.   

    可以用EXISTS
    SELECT * FROM TT WHERE EXISTS(...) AND EXISTS (....)
      

  5.   

    就是这样
    SELECT * FROM TT WHERE EXISTS(240x320) AND EXISTS (支持320x240分辨率)
      

  6.   

    还是写一下表里的数据吧软件表
    id name
    1  西游记
    2  三国演义
    3  水浒传
    4  红楼梦属性表
    p_id p_name 
    1    分辨率
    2    键盘
    3    平台 参数表
    v_id v_name p_id
    1    320x240 1
    2    240x480 1
    3    全键盘   2
    4    无键盘   2
    5    MTk     3
    6    展讯     3软件属性参数对应表 
    s_id p_id v_id
    1    1    1
    1    1    2
    1    2    3
    1    3    6......自己编的
      

  7.   

    什么查询搞不定?
    大不了分布执行SQL也行啊。
      

  8.   

    你想查出来的结果是什么样?
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  9.   

    -- phpMyAdmin SQL Dump
    -- version 2.11.2
    -- http://www.phpmyadmin.net
    --
    -- 主机: localhost
    -- 生成日期: 2011 年 05 月 19 日 01:33
    -- 服务器版本: 5.0.45
    -- PHP 版本: 5.2.5SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";--
    -- 数据库: `fujian`
    ---- ----------------------------------------------------------
    -- 表的结构 `prop`
    --CREATE TABLE IF NOT EXISTS `prop` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `title` varchar(32) collate utf8_unicode_ci NOT NULL,
      `show` tinyint(4) default '0',
      `show_index` int(10) unsigned NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ;--
    -- 导出表中的数据 `prop`
    --INSERT INTO `prop` (`id`, `title`, `show`, `show_index`) VALUES
    (1, '屏幕', 1, 0),
    (3, '键盘', 1, 0),
    (4, 'RAM', 0, 0),
    (5, 'ROM', 0, 0),
    (6, '平台', 0, 0);-- ----------------------------------------------------------
    -- 表的结构 `soft_base`
    --CREATE TABLE IF NOT EXISTS `soft_base` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `name` varchar(255) NOT NULL,
      `type_id` int(10) unsigned NOT NULL,
      `type` int(10) unsigned NOT NULL,
      `innerID` int(10) unsigned NOT NULL,
      `despic` varchar(255) default NULL,
      `cpid` int(10) unsigned NOT NULL,
      `apcode` varchar(32) NOT NULL,
      `iffree` tinyint(4) NOT NULL default '0',
      `intro_size` text character set utf8 collate utf8_unicode_ci NOT NULL,
      `intro_fee` text character set utf8 collate utf8_unicode_ci NOT NULL,
      `intro_cp` text character set utf8 collate utf8_unicode_ci NOT NULL,
      `intro_content` text character set utf8 collate utf8_unicode_ci NOT NULL,
      `intro_define` text character set utf8 collate utf8_unicode_ci NOT NULL,
      `if_pass` tinyint(3) unsigned NOT NULL default '0',
      `upload_user_id` int(10) unsigned NOT NULL default '0',
      `icon` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
      `download` int(10) unsigned NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=gb2312 AUTO_INCREMENT=641 ;--
    -- 导出表中的数据 `soft_base`
    --INSERT INTO `soft_base` (`id`, `name`, `type_id`, `type`, `innerID`, `despic`, `cpid`, `apcode`, `iffree`, `intro_size`, `intro_fee`, `intro_cp`, `intro_content`, `intro_define`, `if_pass`, `upload_user_id`, `icon`, `download`) VALUES
    (455, '天使之恋-纯爱物语1', 51, 0, 383, '28/89/455_p.gif', 3, '', 1, '', '', '', '一经推出便掀起一股青春动漫风潮。游戏中6位女主人公,对话的时候栩栩如生,能做出丰富表情。配合漂亮的CG,纯爱的故事情节,仿佛置身在...', '', 1, 0, '', 0),
    (525, '测测', 50, 0, 451, '51/32/525_p.JPG', 3, '', 0, '', '', '', '', '', 2, 17, '97/61/525_i.gif', 0),
    (527, '诉讼费1', 50, 0, 453, '47/31/527_p.JPG', 3, '', 0, '体积', '说明', '商说明', '应用', '责声', 2, 20, '39/44/527_i.gif', 0),
    (530, '图表测试', 35, 0, 456, '1/81/530_p.gif', 0, '', 1, '1', '2', '4', '3', '5', 1, 17, '93/67/530_i.gif', 0),
    (531, '代收费', 35, 0, 457, '45/38/531_p.JPG', 4, '', 0, '都是', '范德萨', '进口废钢', '3', '都是', 1, 0, '45/38/531_i.gif', 0),
    (533, '非法所得', 50, 0, 459, '18/41/533_p.JPG', 5, '', 0, 'ff', 'dd', '22', 'gg', 'yy', 1, 0, '18/41/533_i.gif', 0),
    (638, '非法所得', 35, 0, 473, '52/34/638_p.JPG', 1, '', 0, '', '', '', '', '', 1, 0, '52/34/638_i.gif', 0),
    (639, '代收费', 35, 0, 474, '18/65/639_p.JPG', 1, '', 0, '', '', '', '', '', 1, 0, '18/65/639_i.gif', 0),
    (640, '图表测试', 35, 0, 475, '75/51/640_p.gif', 1, '', 0, '', '', '', '', '', 1, 0, '75/51/640_i.gif', 0);-- ----------------------------------------------------------
    -- 表的结构 `soft_prop`
    --CREATE TABLE IF NOT EXISTS `soft_prop` (
      `soft_id` int(10) unsigned NOT NULL,
      `prop` int(10) unsigned NOT NULL,
      `sub_prop` int(10) unsigned NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;--
    -- 导出表中的数据 `soft_prop`
    --INSERT INTO `soft_prop` (`soft_id`, `prop`, `sub_prop`) VALUES
    (455, 1, 2),
    (455, 1, 19),
    (455, 3, 4),
    (455, 3, 6),
    (455, 4, 16),
    (455, 5, 17),
    (455, 6, 12),
    (455, 6, 18),
    (527, 1, 2),
    (527, 3, 4),
    (527, 4, 9),
    (527, 5, 11),
    (527, 6, 12),
    (639, 1, 7),
    (640, 1, 2),
    (533, 6, 18),
    (533, 6, 13),
    (533, 6, 12),
    (533, 5, 17),
    (533, 5, 11),
    (533, 4, 16),
    (525, 1, 7),
    (525, 3, 4),
    (525, 3, 5),
    (525, 3, 6),
    (525, 4, 9),
    (525, 4, 10),
    (525, 5, 11),
    (525, 5, 17),
    (638, 1, 8),
    (531, 1, 19),
    (531, 3, 6),
    (531, 4, 16),
    (531, 5, 17),
    (531, 6, 18),
    (533, 4, 10),
    (533, 4, 9),
    (533, 3, 6),
    (533, 3, 5),
    (533, 3, 4),
    (533, 1, 7),
    (533, 1, 2);-- ----------------------------------------------------------
    -- 表的结构 `sub_prop`
    --CREATE TABLE IF NOT EXISTS `sub_prop` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `title` varchar(32) collate utf8_unicode_ci NOT NULL,
      `pid` int(10) unsigned NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=21 ;--
    -- 导出表中的数据 `sub_prop`
    --INSERT INTO `sub_prop` (`id`, `title`, `pid`) VALUES
    (2, '320x240', 1),
    (4, '全键盘', 3),
    (5, '标准键盘', 3),
    (6, '无键盘', 3),
    (7, '240x400', 1),
    (8, '800x480', 1),
    (9, '2M', 4),
    (10, '4M', 4),
    (11, '32M', 5),
    (12, 'MTK', 6),
    (13, '高通', 6),
    (14, '展讯', 6),
    (15, 'Mstar', 6),
    (16, '8M', 4),
    (17, '16M', 5),
    (18, 'Android', 6),
    (19, '240x320', 1),
    (20, '游戏', 7);
      

  10.   

    比如按上面的数据来看,同时支持320x240和240x320分辨率的是id为455的软件,当然查询条件有可能会更复杂,比如支持240x320并且也支持320x240分辨率,全键盘的软件;或者除240x320分辨率以外并支持触摸屏和标准键盘的软件
      

  11.   

    create view base as 
    SELECT a.*,b.*,c.`title` AS ctitle,d.`title` AS dtitle FROM `soft_base` a LEFT JOIN `soft_prop` b ON a.id=b.soft_id
    LEFT JOIN `sub_prop` c ON c.id=b.sub_prop
    LEFT JOIN `prop` d ON d.`id`=c.`pid`;
    SELECT DISTINCT id FROM base a WHERE 
    EXISTS(SELECT 1 FROM base WHERE id=a.id AND ctitle='320x240') 
    AND
    EXISTS(SELECT 1 FROM base WHERE id=a.id AND ctitle='240x320') 自行修改BASE中的所需字段