Jump to content
php.lv forumi

Trīs līmeņu referral sistēma


senters

Recommended Posts

Noderētu komentāri, kā veidot 3 līmeņu referāļu sistēmu (uzskaiti). Iesākumā skatījos šo tēmu - http://php.lv/f/topic/15694-referalu-sistema/, bet īsti nav vajadzīgais.

 

Ir 3 līmeņos piesaiste (piramīdveida). Tālāk par katru līmeni, tiek lietotājiem pieskaitīti peļņas % (1. - 3%, 2. - 2%, 3. - 1%).

 

Kā veidot šo līmeņu uzskaiti? Links būtu www.site.com/r=janis, atverās reģistrāciajs forma un jaunais izveidotais lietotājs kopā ar piesaistītāju tiek insertots iekš tabula "user_referrals": 

id

user_id

ref_user_id

date_created

 

Bet būtu kaut kā jāsapin arī līmeņi. Scenārijs -

 

Jānis piesaista Pēteri (Pēteris 1. līmenis Jānim),

Pēteris piesaista Zani (Zane 2. līmenis Jānim)

Zane piesaista Juri (Juris 3. līmenis Jānim)

 

Attiecīgi Pēterim Zane 1. līmenis un Juris 2. līmenis un Jura piesaistītās personas Pēterim 3. līmenis utt.

Link to comment
Share on other sites

Nu jā.. tā laikam arī būs. Kaut kā pārāk sarežģīti piegāju šim

 

Vienīgi varētu būt piņķerīgi selecti jāraksta. Diez kā labāk rīkoties. Veidot 3 fjas - isFirstLevelReferral() {} .. kurās pakāpeniski noskaidrot līmeņus, vai savādāk?

Edited by senters
Link to comment
Share on other sites

3 līmeņu referāļus šādi norealizēju, ja ir kādi labojumi lūdzu pakomentējiet ->

 

 

 

// Referrals - Level 1
    function firstLevelReferral() {
        $sql = mysql_query("SELECT * FROM h_referrals WHERE user_id = ".$_SESSION['usid']."") or trigger_error(mysql_error());
        $users = array();
        while($row = mysql_fetch_assoc($sql)) {
            $users[] = $row['ref_user_id'];
        }
        return $users;
    }


    // Referrals - Level 2
    function secondLevelReferral() {
        // Get Level 1 users
        $first_level_users = implode(',', firstLevelReferral());
        $sql = mysql_query("SELECT * FROM h_referrals WHERE user_id IN (".$first_level_users.")") or trigger_error(mysql_error());
        $users = array();
        while($row = mysql_fetch_assoc($sql)) {
            $users[] = $row['ref_user_id'];
        }
        return $users;
    }




    // Referrals - Level 3
    function thirdLevelReferral() {
        // Get Level 2 users
        $second_level_users = implode(',', secondLevelReferral());
        $sql = mysql_query("SELECT * FROM h_referrals WHERE user_id IN (".$second_level_users.")") or trigger_error(mysql_error());
        $users = array();
        while($row = mysql_fetch_assoc($sql)) {
            $users[] = $row['ref_user_id'];
        }
        return $users;
    }
 

Izvada katra līmeņa useru id'us ko tālāk apstrādās, lai iegūtu citus user paramus:

 

 

 

<p>
        1 LIMENIS -> <?=implode(",", firstLevelReferral())?><br />
        2 LIMENIS -> <?=implode(",", secondLevelReferral())?><br />
        3 LIMENIS -> <?=implode(",", thirdLevelReferral())?><br />
    </p>
 
Edited by senters
Link to comment
Share on other sites

 

1 LIMENIS -> <?=implode(",", firstLevelReferral())?><br />

2 LIMENIS -> <?=implode(",", secondLevelReferral())?><br />
3 LIMENIS -> <?=implode(",", thirdLevelReferral())?><br />

cik liekas reizes te izpildās firstLevelReferral()?

 

 

IN (".$first_level_users.")

bet ja nav neviens first_level_users?

 

tās f-jas ir gaužām līdzīgas, kā ar vienu f-ju, kurai padod masīvu ar useru id'iem?

Link to comment
Share on other sites

nebūtu bijis vienkāršāk izmantot līdzīgu struktūru (uz fikso uzmetu):

CREATE TABLE IF NOT EXISTS `users` (
  `id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
  `nick` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
--
-- Table structure for table `users_referral_levels`
--
CREATE TABLE IF NOT EXISTS `users_referral_levels` (
  `id` smallint(3) unsigned NOT NULL AUTO_INCREMENT,
  `title` tinytext COLLATE utf8_unicode_ci NOT NULL,
  `bonuss` tinyint(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
--
-- Table structure for table `users_referral_list`
--
CREATE TABLE IF NOT EXISTS `users_referral_list` (
  `id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` mediumint(7) unsigned DEFAULT NULL,
  `refferal_id` mediumint(7) unsigned DEFAULT NULL,
  `refferal_level_id` smallint(3) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `refferal_id` (`refferal_id`),
  KEY `refferal_level_id` (`refferal_level_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Kāpēc?

a) pie jūzera info glabāsies tikai jūzeru info

b) pie leveļiem tikai un vienīgi ar leveļiem saistīta info

c) pie jūzeru referāļiem - visa info, kas saistīta ar referāļiem

d) iespēja pievienot lielu skaitu referāļu līmeņu un to parametrus

e) samazinātos pieprasījumu skaits un nevajadzētu bakstīt kodā katru reizi, kad parādās jauns levels

 

Pie pirmā posta piebremzēšu, varbūt kautko mudos pamatīgi

Edited by Yii
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...