从mysql中的多个检查中获取数据库表中的随机记录?

时间:2014-03-05 10:39:51

标签: php mysql sql database

我有一个名为“ads”的数据库表。我想随机在网站上显示这些广告。我的表结构是

user_id                 int(11)              
type                    varchar(50)             
title                   varchar(100)         
body                    varchar(100)           
display_url             varchar(100)           
target_url              varchar(100)       
dimension               varchar(50)    
image                   varchar(200)    
preferred_countries     text                  
preferred_languages     text                    
preferred_sites         text                  
excluded_sites          text                
preferred_keywords      text                
excluded_keywords       text                  
preferred_devices       varchar(100)      
schedule                mediumtext            
clicks                  int(20)              
clicked                 int(11)                
cpc                     decimal(20,20)    

正如您所看到的,有preferred_countriespreferred_languagespreferred_devices等列。 我想通过应用多个支票向访问者展示这些广告,例如,如果有任何广告的首选国家/地区,那么它将向该特定国家/地区的访问者显示,依此类推。 我已经获取了与用户相关的所有数据,即。访客的国家,访客的语言等

但我不知道如何获取这样的记录。

3 个答案:

答案 0 :(得分:1)

select * from ads
where preferred_countries = $mycountry
order by rand()
limit 1

答案 1 :(得分:0)

试试这个

select * from ads
where preferred_countries = $mycountry and preferred_languages=$language
order by rand()
limit 1

答案 2 :(得分:0)

您可以将MySQL's RAND() functionORDER BY FIELD()

结合起来考虑
SELECT * FROM `ads` 
ORDER BY FIELD(preferred_countries, '$mycountry') DESC, RAND()
LIMIT 1

这不会过滤掉与$ mycountry不匹配的行,但如果它们存在,您将首先获得它们。如果有多个匹配,您还应该得到随机结果。

如果您的preferred_countries字段可能包含多个国家/地区名称,那么这也不会有效。