Приглашения на сайт

Статус
Закрыто для дальнейших ответов.

maxon12007

Well-Known Member
Регистрация
08.03.2012
Сообщения
86
Привет любимый 3wforums.ru!

В общем, сразу вопрос.
Хочу сделать систему приглашений на сайт.
Есть такая БД.

В колонке id1- id человека, который пригласил кого-то на сайт.
В колонке id2- id человека, которого пригласили на сайт.
Т.е. id1 пригласил id2, id2 пригласил id3, id3 пригласил id4 и id5

Надо сделать как то так:
5→3→2→1
4→3→2→1
Т.е. цепочку приглашений.

Вопрос исчерпан.
Код:
$i = 1;
$id2=5;
echo $id2;
while ($i <= 3) {
$query = "select * from invites where id2=".$id2;
$result = mysql_query($query);
$row=mysql_fetch_array($result);
echo $row['id1'];
$id2=$row['id1'];
$i++;
}
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
зачем такой геморой, у тебя же есть таблица с юзерами вот и создай в ней поле referal и храни в нем реферала, а потом выдергиваешь по цепочке, или я не прав?
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
зачем такой геморой, у тебя же есть таблица с юзерами вот и создай в ней поле referal и храни в нем реферала, а потом выдергиваешь по цепочке, или я не прав?
По-моему вы правы, вот только это один из способов хранения таких цепочек.

Также можно создать таблицу Invates там будет два айди, кто пригласил и которого пригласили, и поцепочки вставлять.
 

maxon12007

Well-Known Member
Регистрация
08.03.2012
Сообщения
86
Также можно создать таблицу Invates там будет два айди, кто пригласил и которого пригласили, и поцепочки вставлять.
Есть такая БД.

В колонке id1- id человека, который пригласил кого-то на сайт.
В колонке id2- id человека, которого пригласили на сайт.
И вот как сделать цепочку?
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
Ну у меня на скорую мысль один вариант, тащим все поля referal и user и в цикле потрошим и выченяем заветную цепочку, функцию завтро напишу,
мы просто должни получить асоциативный масси вида:
user => ref,
user1 => ref1,
user2 => ref2
...
userN => refN
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Также можно создать таблицу Invates там будет два айди, кто пригласил и которого пригласили, и поцепочки вставлять.
Есть такая БД.

В колонке id1- id человека, который пригласил кого-то на сайт.
В колонке id2- id человека, которого пригласили на сайт.
И вот как сделать цепочку?
Вот так:

Код:
<?
// Пример Таблицы
// # id - Айди, Первый Ключ
// #####################
// id - invater - guest
// 1  - 1	   - 2
// 2  - 2	   - 3
// #####################
// Немножко говнокода не помешает (:D (C) Volter9
// Connect - Коннект
// localhost - host, root - uset, "" - password
$db = mysql_connect("localhost","root","");
mysql_select_db("invate");
// String with Chain of Invaters - Сторка с Цепью
$chainString = "";
// Common Queries - Основные Запросы
$firstInvaterQuery = mysql_query("SELECT `invater` FROM `InvateTable`");
// First Index - Первый Индекс
$firstInvaterArray = mysql_fetch_array($firstInvaterQuery, MYSQL_ASSOC);
$firstInvater = $firstInvaterArray['invater'];
// Обозначение Переменной
$i = $firstInvater;
// Первый запрос
$query = mysql_query("SELECT `invater`,`guest` FROM `InvateTable` WHERE `invater`=$i");
// Цыкл для Цепочки.
do {
// Смотрит таблицу.
$query = mysql_query("SELECT `invater`,`guest` FROM `InvateTable` WHERE `invater`=$i");

// Если массив пуст - Нахрен прекращяем цыкл }:D
if (mysql_num_rows($query) == 0) {
  break;
}

// Массив от $query
$array = mysql_fetch_array($query);

// Проверяем следуйщего invater'a
$queryNext = mysql_query("SELECT `invater`,`guest` FROM `InvateTable` WHERE `invater`=$array[guest]");

// Добавляем индекс юзера в цепь || Также можно переделать на имя юзера.
$chainString .= $array['invater'];
// Проверка на лишний "=>"
if(mysql_num_rows($queryNext) != 0) {
  $chainString .= " => ";
}

// $i = следущий индекс для цепи
$i = $array['guest'];
} while (mysql_num_rows($query) >= 1); // Конец Цикла
// Выводим Строку
echo($chainString);
?>
Сам *.PHP и сам *.SQL:
Код:
-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Июл 19 2012 г., 02:14
-- Версия сервера: 5.1.44
-- Версия PHP: 5.3.1
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- База данных: `invate`
--
-- --------------------------------------------------------
--
-- Структура таблицы `InvateTable`
--
CREATE TABLE IF NOT EXISTS `InvateTable` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `invater` int(5) NOT NULL,
  `guest` int(5) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
 

maxon12007

Well-Known Member
Регистрация
08.03.2012
Сообщения
86
Volter9, что-то я не очень понял.
У меня на входе должен быть id участника, от которого мы смотрим цепочку вверх.
Примерно как в примере из шапки, но тут получается много SQL запросов.
Код:
<?php
$connect = mysql_connect('localhost', 'root', '');
$db_select = mysql_select_db('bd', $connect);
$id2="4";
$i=1;
while($i<6) {
echo $id2;
$query = "select * from invites where id2=".$id2;
$result = mysql_query($query);
$row=mysql_fetch_array($result);
if (mysql_num_rows($result) == 0) { break; }
echo ">";
$id2=$row['id1'];
$i++;
}
?>
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Volter9, что-то я не очень понял.
У меня на входе должен быть id участника, от которого мы смотрим цепочку вверх.
Примерно как в примере из шапки, но тут получается много SQL запросов.
Код:
<?php
$connect = mysql_connect('localhost', 'root', '');
$db_select = mysql_select_db('bd', $connect);
$id2="4";
$i=1;
while($i<6) {
echo $id2;
$query = "select * from invites where id2=".$id2;
$result = mysql_query($query);
$row=mysql_fetch_array($result);
if (mysql_num_rows($result) == 0) { break; }
echo ">";
$id2=$row['id1'];
$i++;
}
?>
Главное что б работало.

Папа всегда говорил:
Напиши так что б сначало работало, а потом можно и оптимизировать код, с прибытком трафика.
Так-то у тебя хорошо написано, то есть я зря потратил свое время? Сам ведь просил показать пример.
В следуйщий раз объясняй лучше!

Попробую решить поже. (У тебя намерения о $_GET или $_POST?)
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
[member=maxon12007], 10 запросов к махонькой легенькой табличке, от службы (построение партнерки) которая, обычно, вызывается сравнительно редко? У вашего проекта нет более приоритетных задач, что вы трясетесь над такой мелочью)

Тут вопрос, иногда, становится, как бы сократить ~ 50 тыс. запросов, а вы про 10))))
 

AngelGabriel

И имя мне - легион
Регистрация
23.11.2008
Сообщения
778
Volter9 Запрос к базе в цикле - жесть.


maxon12007 Почему все сделано на какихто загадочных цифрах которые помещены в таблицу.
Что если у человека больше одного реферала?
 

Volter9

defined('SURRENDER') or die(); // StarWars
Регистрация
27.05.2012
Сообщения
1 145
Volter9 Запрос к базе в цикле - жесть.


maxon12007 Почему все сделано на какихто загадочных цифрах которые помещены в таблицу.
Что если у человека больше одного реферала?
Между прочим, не только у меня запрос в цикле:
Привет любимый 3wforums.ru!

В общем, сразу вопрос.
Хочу сделать систему приглашений на сайт.
Есть такая БД.

В колонке id1- id человека, который пригласил кого-то на сайт.
В колонке id2- id человека, которого пригласили на сайт.
Т.е. id1 пригласил id2, id2 пригласил id3, id3 пригласил id4 и id5

Надо сделать как то так:
5→3→2→1
4→3→2→1
Т.е. цепочку приглашений.

Вопрос исчерпан.
Код:
$i = 1;
$id2=5;
echo $id2;
while ($i <= 3) {
$query = "select * from invites where id2=".$id2;
$result = mysql_query($query);
$row=mysql_fetch_array($result);
echo $row['id1'];
$id2=$row['id1'];
$i++;
}
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Это вопрос построения деревьев, есть вариант решения, когда указывается родитель и уровень, тогда есть возможность сделать кол-во лефт джойнов соответственно уровню. Обычно данный метод используюется для построения хлебных крошек.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ