За последние 24 часа нас посетили 22747 программистов и 1226 роботов. Сейчас ищут 777 программистов ...

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

Тема в разделе "PHP и базы данных", создана пользователем Ирина Гущина, 9 авг 2019.

Метки:
  1. Ирина Гущина

    Ирина Гущина Новичок

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

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

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

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

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

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

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    http://www.skillz.ru/dev/php/article-Obyasnenie_SQL_obedinenii_JOIN_INNER_OUTER.html
    --- Добавлено ---
    Фриланс го.
     
  3. Ирина Гущина

    Ирина Гущина Новичок

    С нами с:
    8 авг 2019
    Сообщения:
    19
    Симпатии:
    0
    На данный момент получилось так:
    Код (Text):
    1. $sql = mysqli_query($link, "SELECT * FROM " . $wpdb->base_prefix . "ihc_orders
    2. LEFT JOIN " . $wpdb->base_prefix . "users ON " . $wpdb->base_prefix . "ihc_orders.uid=" . $wpdb->base_prefix . "users.id
    3. LEFT JOIN " . $wpdb->base_prefix . "uap_affiliates ON " . $wpdb->base_prefix . "ihc_orders.uid=" . $wpdb->base_prefix . "uap_affiliates .uid
    4. LEFT JOIN " . $wpdb->base_prefix . "uap_referrals ON " . $wpdb->base_prefix . "uap_referrals.affiliate_id=" . $wpdb->base_prefix . "uap_affiliates .uid
    5. WHERE " . $wpdb->base_prefix . "ihc_orders.uid=" . $wpdb->base_prefix . "users.id ");
    Не знаю правильно или нет. И не понятно как вытащить значение из таблицы referrals столбец amount.
    Не поняла.
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    referrals.amount
     
  5. Ирина Гущина

    Ирина Гущина Новичок

    С нами с:
    8 авг 2019
    Сообщения:
    19
    Симпатии:
    0
    Спасибо.
    Это понятно. Где именно в запросе к базе это записать? Вот что не понятно.
     
    #5 Ирина Гущина, 9 авг 2019
    Последнее редактирование: 9 авг 2019