Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 24

Как узнать относится ли значение из одной таблицы к значению из другой?

09.08.2019, 20:51. Показов 702. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем здравствуйте. Сайт на Wordpress. Есть 4 таблицы в БД Mysql которые надо как-то связать.

orders со столбцами uid, lid, amount_value, status, create_date
users со столбцом id
referrals со столбцами affiliate_id, amount, status
affiliates со столбцами id, uid
Значения orders.uid, users.id и affiliates.uid совпадают. Например: 14, 14 и 14

Значения referrals.affiliate_id и affiliates.id совпадают. Например: 12 и 12

Таблица affiliates содержит в себе значения и 14 и 12 (возможно это как-то поможет в связке этих таблиц/столбцов).

Все эти значения относятся к одному пользователю.

Сейчас написан такой код (код хоть и кривой, но свою функцию выполняет. Всё выводит и считает в личном кабинете для каждого пользователя) В нём используются только первые две таблицы:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
require_once 'connection.php';
  $link = mysqli_connect($host, $user, $password, $database);
  if (!$link) {
    echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
    exit;
  }
    global $wpdb;
    $cur_user = wp_get_current_user()->user_login;
    $cur_id = get_current_user_id();
    $now = time();
    
  $sql = mysqli_query($link, "SELECT " . $wpdb->base_prefix . "ihc_orders.create_date, " . $wpdb->base_prefix . "ihc_orders.uid, " . $wpdb->base_prefix . "ihc_orders.status , " . $wpdb->base_prefix . "ihc_orders.amount_value, " . $wpdb->base_prefix . "ihc_orders.lid, " . $wpdb->base_prefix . "users.id FROM " . $wpdb->base_prefix . "ihc_orders, " . $wpdb->base_prefix . "users WHERE " . $wpdb->base_prefix . "ihc_orders.uid=" . $wpdb->base_prefix . "users.id AND status= 'Completed'");
    
  while ($result = mysqli_fetch_array($sql)) {
            $start=($result['create_date']);
            $user_uid=($result['uid']);
            $user_id=($result['id']);
            $stat=($result['status']);
            $reg_lid=($result['lid']);
            $amount=($result['amount_value']); 
            $datediff = date('d.m.Y') - date("d.m.Y", strtotime($result['create_date']));    
              
      if ($user_uid==$cur_id&&($reg_lid['lid']==1)) {
        /* Начисляем процент для lid=1*/  
            $proc = 25;  //Процентов за всё время
            $proc_d =0.25*$datediff;  //Процентов в день
            $proc = $amount/100*$proc;  // высчитываем процент от числа
            $proc_d = $amount/100*$proc_d;  // высчитываем процент в день от числа
            $amountWithPct_all = $amount + $proc;  // суммируем число с процентами от этого числа
            $amountWithPct_d = $amount + $proc_d;  // суммируем число с процентами в день от этого числа
            round ($amountWithPct_all);  // округляем
            round ($amountWithPct_d);   // округляем     
         
        echo "Дата оплаты: {$start}<br/>";
        echo "Прошло дней: {$datediff}<br/>";
        echo "Внесено: {$amount} ₽<br/>";
        echo "Заработано на данный момент: $proc_d ₽<br/>";
        echo "Cумма на конец периода: $amountWithPct_all ₽<br/><br/>";
      }
      
      elseif($user_uid==$cur_id&&($reg_lid['lid']==2)){
      /* Начисляем процент для lid=2*/
            $proc = 60; //Процентов за всё время
            $proc_d =0.6*$datediff; //Процентов в день
            $proc = $amount/100*$proc; // высчитываем процент от числа
            $proc_d = $amount/200*$proc_d; // высчитываем процент в день от числа
            $amountWithPct_all = $amount + $proc; // суммируем число с процентами от этого числа
            $amountWithPct_d = $amount + $proc_d; // суммируем число с процентами в день от этого числа
            round ($amountWithPct_all); // округляем
            round ($amountWithPct_d); // округляем
          
        echo "Дата оплаты: {$start}<br/>";
        echo "Прошло дней: {$datediff}<br/>";
        echo "Внесено: {$amount} ₽<br/>";
        echo "Заработано на данный момент: $proc_d ₽<br/>";
        echo "Cумма на конец периода: $amountWithPct_all ₽<br/><br/>";    
}
      elseif ($user_uid==$cur_id&&($reg_lid['lid']==3)){
              /* Начисляем процент для lid=3*/
            $proc = 89; //Процентов за всё время
            $proc_d =0.89*$datediff; //Процентов в день
            $proc = $amount/100*$proc; // высчитываем процент от числа
            $proc_d = $amount/300*$proc_d; // высчитываем процент в день от числа
            $amountWithPct_all = $amount + $proc; // суммируем число с процентами от этого числа
            $amountWithPct_d = $amount + $proc_d; // суммируем число с процентами в день от этого числа
            round ($amountWithPct_all); // округляем
            round ($amountWithPct_d); // округляем
          
        echo "Дата оплаты: {$start}<br/>";
        echo "Прошло дней: {$datediff}<br/>";
        echo "Внесено: {$amount} ₽<br/>";
        echo "Заработано на данный момент: $proc_d ₽<br/>";
        echo "Cумма на конец периода: $amountWithPct_all ₽<br/><br/>";
}
      else{
        }     
  } 
?>

Скрины таблиц во вложениях.
Вопрос: Как связать все эти столбцы между собой чтобы скрипт понял что это относится к одному пользователю? В соответствии с этим прибавить значение из referrals.amount к $amount (из кода выше) для пользователя к которому относятся эти столбцы. Ковыряю, ковыряю, а толка 0. Знаний совсем не хватает. Заранее большое спасибо.
Миниатюры
Как узнать относится ли значение из одной таблицы к значению из другой?   Как узнать относится ли значение из одной таблицы к значению из другой?   Как узнать относится ли значение из одной таблицы к значению из другой?  

Изображения
 
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2019, 20:51
Ответы с готовыми решениями:

Как в поле ID одной таблицы записать значение поля ID другой таблицы
В БД две таблицы: 1)USERS с полями ID_User, Name, Password. В нее записываются пользователи после регистр-ии. 2)SALES с полями...

Как автоматически вставить значение в столбец одной таблицы взятое из столбца другой?
В БД &quot;Фирма по продаже запчастей&quot; есть таблица Цена: ID поставщика ID детали Дата изменения Новая цена И таблица Поставка: ...

Заменить значение ключа из одной таблицы именем из другой таблицы в форме
Здравствуйте! Есть две таблицы. Одна таблица называется &quot;Посуда&quot; с полями &quot;Ключ посуды&quot; и &quot;Наименование посуды&quot;. Эта...

2
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 24
12.08.2019, 12:02  [ТС]
Сейчас код притерпел изменения, но он также как и старый работает.
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
error_reporting(-1);
header('Content-Type: text/html; charset=utf-8');
require_once 'wp-load.php'; // подключаем движок вп, скрипт должен лежать в корне
global $wpdb;
 
$user_id = '';
if ( is_user_logged_in() ) {
  $user_id = get_current_user_id();
  echo 'Вы авторизованы на сайте!<br>';
} else {
  echo 'Вы не авторизованы';
  die();
}
 
$current_user = get_userdata($user_id);
 
$ihc_orders_result = $wpdb->get_results("SELECT " . $wpdb->base_prefix . "ihc_orders.create_date, " . $wpdb->base_prefix . "ihc_orders.uid, " . $wpdb->base_prefix . "ihc_orders.status , " . $wpdb->base_prefix . "ihc_orders.amount_value, " . $wpdb->base_prefix . "ihc_orders.lid, " . $wpdb->base_prefix . "users.id FROM " . $wpdb->base_prefix . "ihc_orders, " . $wpdb->base_prefix . "users WHERE " . $wpdb->base_prefix . "ihc_orders.uid=" . $wpdb->base_prefix . "users.id AND " . $wpdb->base_prefix . "ihc_orders.status= 'Completed' AND " . $wpdb->base_prefix . "ihc_orders.uid='".$user_id."'",ARRAY_A );
 
if(!empty($ihc_orders_result)){
  foreach ($ihc_orders_result as $result) {
    $start=$result['create_date'];
    $user_uid=$result['uid']; 
    $stat=$result['status'];
    $reg_lid=$result['lid'];
    $amount=$result['amount_value'];
    $datediff = date('d.m.Y') - date("d.m.Y", strtotime($result['create_date'])); // получаем разность дат
 
    if ( $reg_lid['lid']==1) {
      $proc = 25;
      $proc_d =0.25*$datediff;
      $proc = $amount/100*$proc;
      $proc_d = $amount/100*$proc_d;
    }
 
 
    if ( $reg_lid['lid']==2) {
      $proc = 60; //Процентов за всё время
      $proc_d =0.6*$datediff; //Процентов в день
      $proc = $amount/100*$proc; // высчитываем процент от числа
      $proc_d = $amount/200*$proc_d; // высчитываем процент в день от числа
    }
 
    if ( $reg_lid['lid']==3) {
      $proc = 89; //Процентов за всё время
      $proc_d =0.89*$datediff; //Процентов в день
      $proc = $amount/100*$proc; // высчитываем процент от числа
      $proc_d = $amount/300*$proc_d; // высчитываем процент в день от числа
    }
 
    if(!empty($amount) AND !empty($proc) AND !empty($proc_d)){
      $amountWithPct_all = $amount + $proc; // суммируем число с процентами от этого числа
      $amountWithPct_d = $amount + $proc_d; // суммируем число с процентами в день от этого числа
      $amountWithPct_all=round ($amountWithPct_all); // округляем
      $amountWithPct_d=round($amountWithPct_d); // округляем
 
      /*Выводим результат*/
      echo 'Логин: ' . $current_user->user_login . "\n<br>";
      echo "ID пользователя: {$user_id}<br>";
      echo "ID пользователя из get: {$user_id}<br>";
      echo "Дата начала: {$start}<br>";
      echo "Прошло дней: {$datediff}<br>";
      echo "Внесено: {$amount} ₽<br>";
      echo "Заработано на данный момент: $proc_d ₽<br>";
      echo "Cумма на конец периода: $amountWithPct_all ₽<br><br>";
    }
 
  }
} else{
  echo "Данных ещё нет";
}
 
?>

Есть такой запрос к БД:
MySQL
1
2
3
4
5
$sql = mysqli_query($link, "SELECT * FROM " . $wpdb->base_prefix . "ihc_orders
LEFT JOIN " . $wpdb->base_prefix . "users ON " . $wpdb->base_prefix . "ihc_orders.uid=" . $wpdb->base_prefix . "users.id 
LEFT JOIN " . $wpdb->base_prefix . "uap_affiliates ON " . $wpdb->base_prefix . "ihc_orders.uid=" . $wpdb->base_prefix . "uap_affiliates .uid
LEFT JOIN " . $wpdb->base_prefix . "uap_referrals ON " . $wpdb->base_prefix . "uap_referrals.affiliate_id=" . $wpdb->base_prefix . "uap_affiliates .uid
WHERE " . $wpdb->base_prefix . "ihc_orders.uid=" . $wpdb->base_prefix . "users.id ");
Но с ним не выводится информация из referrals.amount и referrals.affiliate_id и affiliates.id. Где-то в запросе ошибка?
0
0 / 0 / 0
Регистрация: 05.08.2019
Сообщений: 24
13.08.2019, 19:20  [ТС]
Вопрос решён. Можно закрывать тему.
Рабочий код ниже.
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
    <?php
require_once 'connection.php';
  $link = mysqli_connect($host, $user, $password, $database);
  if (!$link) {
    echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error();
    exit;
  }
    global $wpdb;
    $cur_user = wp_get_current_user()->user_login;
    $cur_id = get_current_user_id();
    $now = time();
    
    $sql = mysqli_query($link, "SELECT o.create_date, o.uid, o.status, o.amount_value, o.lid, u.id, sum(r.amount) AS referrals_amount 
    FROM " . $wpdb->base_prefix . "users AS u 
    INNER JOIN " . $wpdb->base_prefix . "ihc_orders AS o ON o.uid = u.id 
    INNER JOIN " . $wpdb->base_prefix . "uap_affiliates AS a ON a.uid = u.id 
    INNER JOIN " . $wpdb->base_prefix . "uap_referrals AS r ON r.affiliate_id = a.id 
    WHERE o.status = 'Completed' 
    GROUP BY r.affiliate_id ");
    
  while ($result = mysqli_fetch_array($sql)) {
            $start=($result['create_date']);
            $user_uid=($result['uid']);
            $user_id=($result['id']);
            $stat=($result['status']);
            $reg_lid=($result['lid']);
            $amount=($result['amount_value']); 
            $datediff = date('d.m.Y') - date("d.m.Y", strtotime($result['create_date']));
      $referrals_amount=($result['referrals_amount']);    
              
      if ($user_uid==$cur_id&&($reg_lid['lid']==1)) {
        /* Начисляем процент для lid=1*/  
            $proc = 25;  //Процентов за всё время
            $proc_d =0.25*$datediff;  //Процентов в день
            $proc = ($amount+$referrals_amount)/100*$proc;  // высчитываем процент от числа
            $proc_d = ($amount+$referrals_amount)/100*$proc_d;  // высчитываем процент в день от числа
          $amount_all = $referrals_amount + $proc_d;
            $amountWithPct_all = $amount + $referrals_amount + $proc; // суммируем число с процентами от этого числа
            $amountWithPct_d = $amount + $referrals_amount + $proc_d; // суммируем число с процентами в день от этого числа
            round ($amountWithPct_all); // округляем
            round ($amountWithPct_d); // округляем
          
        echo "Дата оплаты: {$start}<br/>";
        echo "Прошло дней: {$datediff}<br/>";
        echo "Внесено: {$amount} ₽<br/>";
        echo "Бонусы: {$referrals_amount} ₽<br/>";
        echo "Проценты: {$proc_d} ₽<br/>";
        echo "Бонусы + проценты: $amount_all ₽<br/>";
        echo "Cумма на конец периода: $amountWithPct_all ₽<br/><br/>";
      }
      
      elseif($user_uid==$cur_id&&($reg_lid['lid']==2)){
      /* Начисляем процент для lid=2*/
            $proc = 60; //Процентов за всё время
            $proc_d =0.6*$datediff; //Процентов в день
            $proc = ($amount+$referrals_amount)/100*$proc; // высчитываем процент от числа
            $proc_d = ($amount+$referrals_amount)/200*$proc_d; // высчитываем процент в день от числа
            $amount_all = $referrals_amount + $proc_d;
            $amountWithPct_all = $amount + $referrals_amount + $proc; // суммируем число с процентами от этого числа
            $amountWithPct_d = $amount + $referrals_amount + $proc_d; // суммируем число с процентами в день от этого числа
            round ($amountWithPct_all); // округляем
            round ($amountWithPct_d); // округляем
          
        echo "Дата оплаты: {$start}<br/>";
        echo "Прошло дней: {$datediff}<br/>";
        echo "Внесено: {$amount} ₽<br/>";
        echo "Бонусы: {$referrals_amount} ₽<br/>";
        echo "Проценты: {$proc_d} ₽<br/>";
        echo "Бонусы + проценты: $amount_all ₽<br/>";
        echo "Cумма на конец периода: $amountWithPct_all ₽<br/><br/>";
              
    
}
      elseif ($user_uid==$cur_id&&($reg_lid['lid']==3)){
              /* Начисляем процент для lid=3*/
            $proc = 89; //Процентов за всё время
            $proc_d =0.89*$datediff; //Процентов в день
            $proc = ($amount+$referrals_amount)/100*$proc; // высчитываем процент от числа
            $proc_d = ($amount+$referrals_amount)/300*$proc_d; // высчитываем процент в день от числа
            $amount_all = $referrals_amount + $proc_d;
            $amountWithPct_all = $amount + $referrals_amount + $proc; // суммируем число с процентами от этого числа
            $amountWithPct_d = $amount + $referrals_amount + $proc_d; // суммируем число с процентами в день от этого числа
            round ($amountWithPct_all); // округляем
            round ($amountWithPct_d); // округляем
          
        echo "Дата оплаты: {$start}<br/>";
        echo "Прошло дней: {$datediff}<br/>";
        echo "Внесено: {$amount} ₽<br/>";
        echo "Бонусы: {$referrals_amount} ₽<br/>";
        echo "Проценты: {$proc_d} ₽<br/>";
        echo "Бонусы + проценты: $amount_all ₽<br/>";
        echo "Cумма на конец периода: $amountWithPct_all ₽<br/><br/>";
}
      else{
        }     
  } 
    /* очищаем результаты выборки */
mysqli_free_result($result);
 
/* закрываем подключение */
mysqli_close($link);
?>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.08.2019, 19:20
Помогаю со студенческими работами здесь

Замена значений в поле одной таблицы на значение из другой таблицы
Добрый всем день,прошу помощи,так как не силён в программировании, суть вот в чём: есть программка для учёта техники, всё вроде хорошо,но...

Выбрать значение одной таблицы и показать в цикле вывода другой таблицы при совпадении значений
Добрый день, не могу понять корень проблемы: Есть две таблицы: &quot;catalog&quot; и &quot;category&quot; (скрины прикрепляю к посту) Из таблицы...

Умножить значение одной таблицы на значение другой
Здравствуйте. Есть 2 таблицы, нужно создать запрос, что бы по нажатию кнопки значение Price из первой таблицы умножалось на значение...

Запрос: приравнять значение в одной таблице значению в другой таблице
как можно осуществить запрос : приравнять значение одной таблицы значению в другой таблицы idn | name idf | fname

Как из одной таблицы вытащить данные одной колонки и проставить в другой таблице в oracle?
Мой скрипт везде проставляет одно и то же: update import_data set iin=( select e.iin from zags_2014.existing_persons e where ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru