English 中文(简体)
banner advertising mysql-query with multiple tables
原标题:

My problem is described further under the table structure.

This is my tables for my advertising banner system:

banner

id (unique key)

title

bannersrc

maxhits

maxklik

activefrom

activeuntil

dato

bannerhits (number of shows)

id (unique key)

ip

bannerid (index) (referring to banner.id)

dato

bannerklik (number of clicks)

id (unique key)

ip

bannerid (index) (referring to banner.id)

dato

question

What I want is to make an query that selects a banner from the table banner WHERE:

(b.usertype = $usertype OR b.usertype = 0 )

AND

( activefrom <= now activeuntil >= now

OR

maxklik > number of rows in bannerklik where bannerklik.bannerid = banner.id

OR

maxhits > number of rows in bannerhits where bannerhits.bannerid = banner.id )

Can you create a query for me, because I really don t get how to make that :)

问题回答

i think the following should work .. (assuming you have a usertype field in the banner table)

SELECT
     b.id, b.title, b.bannersrc
FROM
     banner b 
     LEFT OUTER JOIN bannerhits bh ON b.id = bh.bannerid
     LEFT OUTER JOIN bannerklik bk ON b.id = bk.bannerid 
WHERE
     (b.usertype =  0  OR b.usertype = $usertype)
     AND 
     (b.activefrom <= curdate() AND b.activeuntil >= curdate())
GROUP BY 
     b.id, b.title, b.bannersrc, b.maxklik, b.maxhits
HAVING
     ( 
      b.maxklik > count( DISTINCT(bk.id) )
      OR
      b.maxhits > count( DISTINCT(bh.id) )
     )

[EDIT 1]

ok lets revise the conditions here..

You want the following conditions to be true at the same time in order to display an ad

  1. b.usertype be 0 or some value you pass in the $usertype variable
  2. any one of the following rules
    1. b.activefrom <= curdate() AND b.activeuntil >= curdate()
    2. b.maxklik > count( DISTINCT(bk.id)
    3. b.maxhits > count( DISTINCT(bh.id)

am i correct ?





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签