Subscription Suspensions

From: Date: Tue, 31 Jan 2012 17:35:59 +0000
Subject: Subscription Suspensions
Groups: php.db 
Request: Send a blank email to php-db+get-48187@lists.php.net to get a copy of this message
Hi Everyone. I manage an e-mail list. I am trying to add a new function into it: suspensions. The idea is that someone wouldn’t have to unsubscribe. Instead there would be a record of their suspension in the table member_subscription_suspensions and their account wouldn’t be included as a database query result when sending out the daily e-mail. There are three tables: Profile of the subscriber, subscriptions and subscription suspensions: Membership Profiles are in this table: CREATE TABLE IF NOT EXISTS member ( record int(10) NOT NULL AUTO_INCREMENT, first_name varchar(40) NOT NULL DEFAULT '', last_name varchar(40) NOT NULL DEFAULT '', email varchar(40) NOT NULL DEFAULT '', PRIMARY KEY (record), UNIQUE KEY email (email) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3861 ; Subscriptions are stored in this table: CREATE TABLE IF NOT EXISTS member_subscriptions ( subscription_reference int(30) NOT NULL AUTO_INCREMENT, member_reference int(10) NOT NULL DEFAULT '0', list int(2) NOT NULL DEFAULT '0', PRIMARY KEY (subscription_reference) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2130 ; I have designed this table to store subscription suspensions: CREATE TABLE IF NOT EXISTS member_subscription_suspensions ( reference int(30) NOT NULL AUTO_INCREMENT, member_reference int(11) NOT NULL DEFAULT '0', list int(2) NOT NULL DEFAULT '0', subscription_begins date NOT NULL DEFAULT '0000-00-00', subscription_expires date NOT NULL DEFAULT '0000-00-00', PRIMARY KEY (reference) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; The common column between each table is: member.record member_subscriptions.member_reference member_subscription_suspensions.member_reference The only way I know how to write the query (which is wrong) is: SELECT * FROM ( member INNER JOIN member_subscriptions ON member.record = member_subscriptions.member_reference ) LEFT OUTER JOIN member_subscription_suspensions ON member.record = member_subscription_suspensions.member_reference WHERE CURDATE() BETWEEN member_subscription_suspensions.subscription_begins AND member_subscription_suspensions.subscription_expires AND member_subscriptions.list = 1 How do I change this query to exclude any one who has a suspension record for “today”. IE CURDATE() Thanks for your help. Ron Ron Piggott www.TheVerseOfTheDay.info

« previous php.db (#48187) next »