Nano Hash - криптовалюты, майнинг, программирование

Как получить и отобразить результаты JOIN в PHP

Повторная публикация вопроса, размещенного здесь несколько недель назад, с которым я все еще борюсь.

Поэтому все, что я хочу сделать, это отобразить имя пользователя, создавшего задание, для отображения на страницах, подобных этой: https://vloggi.com/commission/21

В настоящее время на странице контроллера у меня есть следующие запросы:

$sql = "SELECT * FROM users_gor WHERE usrg_usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users_gor = $rows[0];

$sql = "SELECT * FROM users_vgr WHERE usrv_usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users_vgr = $rows[0];

$sql = "SELECT * FROM users WHERE usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users = $rows[0];

$sql = "SELECT * FROM vlog-ops WHERE vlop_usr_id ".$db->quote($user_info['usr_id'])." LIMIT 1";
$rows = $db->select($sql);
$users = $rows[0];

$sql = "SELECT usr_name AS vlop_usr_name FROM users WHERE usr_id = ".$db->quote($user_info['usr_id'])." LIMIT 1";
$result = mysql_query($sql);        
$row = mysql_fetch_array($result);


$sql = "SELECT usr_name  FROM users WHERE usr_id='".$db->quote($user_info['usr_id'])." LIMIT 1";
$creator = $db->select1($sql);
$users = $rows[0];

$query = "SELECT u.usr_name, g.usrg_orgname, v.vlop_usr_id  FROM users u 
JOIN vlog-ops v on u.usr_id = v.vlop_usr_id 
JOIN users_gor g on u.usr_id = g.usrg_usr_id";

А затем на странице шаблона у меня есть следующая выборка и эхо.

             <?php
             $result = mysqli_query($connection, $query);
             while($row = mysqli_fetch_assoc($result)) {
                 echo 'User name = ' . $row['u.usr_name'];
                 echo 'Org name = ' . $row['g.usrg_orgname'];
                 echo 'Job posting user id = ' . $row['v.vlop_usr_id'];
             }
             ?>   

Но это не работает. Я попробовал код Пауло Хго, и он тоже не работает.

Итак, я понимаю основную концепцию JOIN, но мне нужна помощь, чтобы на самом деле повторить или распечатать переменную.

Извините за повторную публикацию.

11.04.2018

  • вы задаете вопрос SQL или PHP? Возвращают ли SQL-запросы какие-либо результаты? 11.04.2018

Ответы:


1

Во-первых, вы неправильно извлекаете столбец, результирующий связанный массив не содержит точек (.) для таких полей, как u.usr_name или u.anyfields, он вернет фактические поля таблицы. Чтобы проверить строку из связанного массива, вы можете распечатать ее, как показано ниже (просто для просмотра структуры или сгенерированных ключей массива)

<?php
    $result = mysqli_query($connection, $query);
    while($row = mysqli_fetch_assoc($result)) {
      echo '<pre>';
      print_r($row);
      echo '</pre>';
      die(); //just return 1 iteration.
    }
 ?>  

вывод этого выглядит примерно так:

Array
(
    [usr_name] => john
    [usrg_orgname] => doe
    ...
)

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

Исправьте приведенный выше код, используя фактические имена полей, см. ниже:

<?php
$result = mysqli_query($connection, $query);
if($result) {
   while($row = mysqli_fetch_assoc($result)) {
     echo 'User name = ' . $row['usr_name'];
     echo 'Org name = ' . $row['usrg_orgname'];
     echo 'Job posting user id = ' . $row['vlop_usr_id'];
   }
} else {
   echo 'Something went wrong.'; 
}
?>  
11.04.2018
  • Привет, @imprezzeb. Спасибо, но я не совсем уверен, куда добавить этот код. В запросе или в эхе. Извините, это очевидно. 11.04.2018
  • @JustinWastnage, мой приведенный выше код был просто для справки, вы можете добавить его в цикл while, но чтобы исправить свой код, вам нужно удалить u. в u.usr_name просто используйте фактическое имя поля, в данном случае usr_name. 11.04.2018
  • Привет @imprezzeb. Это все еще не работает. Я прошел снова и снова. Когда я вставляю эхо-код на страницу шаблона, ничего не работает, а когда я вставляю весь код на главную страницу, весь сайт становится пустым. Я могу заставить код работать в SQL. 12.04.2018
  • Пожалуйста, добавьте проверку результатов, как указано выше. Это нужно, чтобы проверить, действительно ли ваш sql-запрос возвращает результаты. 12.04.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..