有一个在纸上看起来很简单的问题,但我有一个大问题,找出如何最好地写一个单一的查询。
我有一张桌子
创建表“profile”值(
`fid`int(10)unsigned NOT NULL默认值'0',
`uid`int(10)unsigned NOT NULL默认值“0”,
`值`text,
主键(`uid`,`fid`),
键'fid'('fid')
)
此表的目的是存储用户的配置文件信息。
典型的一排应该是这样的。。
fid | uid |值
__________________
1 | 77 |玛丽
11 | 77 |罂粟
1 | 123 |史蒂夫
11 | 123 |戴维斯
注:
'1'的'fid'代表名字
'11'的'fid'代表姓氏
“uid”是站点内的用户id。
我要实现的是将所有满足名(如“s%”)和姓(如“D%”)条件的uid带回来。
我之所以需要这个,是因为我有一个自动完成搜索框的用户在网站上。
因此,如果我在搜索框中键入'S',我将看到以字母'S'开头的所有用户的列表,如果我现在键入空白和'D',我现在应该可以看到符合这两个条件的用户的列表。
有人知道这是怎么做到的吗?
提前谢谢。

最佳答案

select firstname.uid, fistname.value, lastname.value
from
  profile_values firstname
  inner join profile_values lastname
    on firstname.uid = lastname.uid
WHERE
  firstname.fid = 1
  AND lastname.fid = 11
  AND fistname.value like 'S%'
  AND lastname.value like 'D%'

或者,使用用户表
select users.uid, fistname.value, lastname.value
from
  users
  inner join profile_values firstname
    on firstname.uid = users.uid
    AND firstname.fid = 1
  inner join profile_values lastname
    on lastname.uid = users.uid
    AND lastname.fid = 11
WHERE
  fistname.value like 'S%'
  AND lastname.value like 'D%'

编辑:
忘了提:union在许多dbms上的性能很差。如果您需要一个联合,那么您的数据库模型主要有问题。在使用union之前,请使用任何其他选项。

关于sql - sql查询问题。我应该使用工会吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/781318/

10-11 01:57