senters Posted February 25, 2013 Report Share Posted February 25, 2013 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. Quote Link to comment Share on other sites More sharing options...
codez Posted February 25, 2013 Report Share Posted February 25, 2013 Tev jau viss ir "sapīts". Ja tu zini ref_user_id un referrera ref_user_id, tas tu zini 2. līmeņa ref_user_id. attiecīgi, ja tu zini šī 2. līmeņa piesaistītāju ref_user_id, tad tu zini arī 3. līmeņa. Quote Link to comment Share on other sites More sharing options...
senters Posted February 25, 2013 Author Report Share Posted February 25, 2013 (edited) 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 February 25, 2013 by senters Quote Link to comment Share on other sites More sharing options...
senters Posted February 25, 2013 Author Report Share Posted February 25, 2013 (edited) 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 February 25, 2013 by senters Quote Link to comment Share on other sites More sharing options...
v3rb0 Posted February 26, 2013 Report Share Posted February 26, 2013 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? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 26, 2013 Report Share Posted February 26, 2013 Man vajag 4. līmeni! Quote Link to comment Share on other sites More sharing options...
Yii Posted February 27, 2013 Report Share Posted February 27, 2013 (edited) 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 February 27, 2013 by Yii Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.