【问题标题】:How can I get the information from one field in a query to use in another query?如何从查询中的一个字段中获取信息以在另一个查询中使用?
【发布时间】:2019-09-30 06:10:19
【问题描述】:

我仍在尝试修复我的详细信息页面,我需要再修复它。

我从这个查询开始。

注意:recordID 实际上是通过单击一个项目从上一页进入的。 此外,name、img、item_code 和 type_id 是我的表中的字段,而不是外部来源。

$recordID = $_GET['recordID'];
$query_master_details = "SELECT * FROM master_list WHERE master_list.master_id = $recordID";
$master_details = mysqli_query($conn, $query_master_details) or die(mysqli_error());
$row_master_details = mysqli_fetch_assoc($master_details);
$totalrows_master_details = mysqli_num_rows($master_details);

现在,我创建了这个来确定如何显示有关该项目的详细信息:

<div class="container2">
  <div class="category"><h2><?php echo $row_master_details['name']; ?></h2></div>
  <?php
  $crafted = "SELECT * FROM `master_list` WHERE `type_id` <= 3 AND `length` = $row_master_details.length ORDER BY RAND() LIMIT 1";
  $result = mysqli_query($conn, $crafted);
  $crafted = array();
  if (mysqli_num_rows($result) > 0) {
      while($row = mysqli_fetch_assoc($result)) {
          $crafted[] = $row;
      }
  }
  if ($row_master_details['type_id'] > 3) {?>
    <p><strong>Code 1</strong></p>
    <p><?php echo $crafted['name']; ?></p>
    <p><img src="img/<?php echo $crafted['img']; ?>" /></p>
    <p><?php echo $crafted['item_code']; ?></p>
    <br><br>
    <p><strong>Code 2</strong></p>
    <p><?php echo $row_master_details['name']; ?></p>
    <p><img src="img/<?php echo $row_master_details['img']; ?>" /></p>
    <p><?php echo $row_master_details['item_code']; ?></p>
    <p><?php echo $row_master_details['length']; ?> Characters</p>
  <?php }else { ?>
    <p><?php echo $row_master_details['name']; ?></p>
    <p><img src="img/<?php echo $row_master_details['img']; ?>" /></p>
    <p><?php echo $row_master_details['item_code']; ?></p>
    <p><?php echo $row_master_details['length']; ?> Characters</p>
  <?php
  mysqli_free_result($master_details);
  ?>
  <?php } ?>
<!-- end .container2 --></div>

解释这里发生了什么:

这会查看在上一页上单击的项目并找到有关它的信息。 如果它的 type_id 为 4 或更高,我需要它执行以下操作:

  1. 查看当前项目的“长度”。
  2. 从 master_list 中选择 type_id 为 1、2 或 3 且长度与第一个匹配的所有项目。
  3. 随机选择 1 个匹配项。
  4. 以与第一个相同的方式输出“名称、img 和 item_code。

如果最初选择的项目的type_id小于4,它只是发布原始信息。这部分有效。第二个查询的部分没有。

我感觉我需要另一个 $_GET[],但不确定如何去做。获取的记录 ID 已附加到用作链接的图像上。

谁能帮我查询这个以便我得到我想要的?

这是我正在尝试做的事情的图片,以帮助更有意义:

这是通过手动选择要匹配的项目并将它们放在一起来完成的。我想要显示一个随机项目。

这是当前代码的样子。这与 MiK 的回答是一样的:

【问题讨论】:

  • 你能不能在这里给出两个表的架构都无法得到它的确切问题。内部查询可以解决问题。你最好解释一下表的架构
  • @aviboy2006 有两个表,但我只将其中一个用于这些查询。第二个更适合我的信息。主表是master_list。它包含以下字段:master_id、name、img、item_code、length 和 type_id。第二个只有破译 type_ids 的信息。
  • 第一次编辑你可以在 if 块 if 中添加你的第二个查询。根据理解,您希望在 type_id > 3 时运行代码 1 和代码 2。我得到了您的长度检查点,但在第二个查询中没有理解点再次检查类型 id。
  • 了解 JOIN
  • @aviboy2006,第一个查询是查明该物品是否为手工制作的物品。 type_id 确定该信息。任何不是手工制品的东西都需要在详细信息页面上放置手工制品。我需要两个项目的长度相同。字段“长度”告诉我字符在“item_code”中的字符串中的情况。两个“item_code”的字符数必须相同。

标签: php mysql sql random


【解决方案1】:

我终于设法通过调整和 MiK 的答案解决了这个问题。

这是我最终得到的代码:

<div class="container2">
  <div class="category"><h2><?php echo $row_master_details['name']; ?></h2></div>
  <?php
  $crafted = "SELECT * FROM `master_list` WHERE `type_id` <= 3 AND `length` = ". $row_master_details['length']." ORDER BY RAND() LIMIT 1";
  $result = mysqli_query($conn, $crafted);
  $citem = array();
  if (mysqli_num_rows($result) > 0) {
      while($row = mysqli_fetch_assoc($result)) {
          $citem[] = $row;
      }
  }
  if ($row_master_details['type_id'] > 3) {?>
    <p><strong>Code 1</strong></p>
    <p><?php echo $citem[0]['name']; ?></p>
    <p><img src="img/<?php echo $citem[0]['img']; ?>" /></p>
    <p><?php echo $citem[0]['item_code']; ?></p>
    <br><br>
    <p><strong>Code 2</strong></p>
    <p><?php echo $row_master_details['name']; ?></p>
    <p><img src="img/<?php echo $row_master_details['img']; ?>" /></p>
    <p><?php echo $row_master_details['item_code']; ?></p>
    <p><?php echo $row_master_details['length']; ?> Characters</p>
  <?php }else { ?>
    <p><?php echo $row_master_details['name']; ?></p>
    <p><img src="img/<?php echo $row_master_details['img']; ?>" /></p>
    <p><?php echo $row_master_details['item_code']; ?></p>
    <p><?php echo $row_master_details['length']; ?> Characters</p>
  <?php
  mysqli_free_result($master_details);
  ?>
  <?php } ?>

  <p><h4>(Need a different crafted item? Refresh the page!)</h4></p>
<!-- end .container2 --></div>

MiK 提供的答案修复了查询,但结果未显示,因为我在数组中有一个数组并且必须调用内部数组。此外,我必须修复数组名称,使其与查询不同。

【讨论】:

    【解决方案2】:
        select
    ml1.master_id, ml1.`name`,ml1.item_code,ml1.img,ml1.length,ml1.type_id,
    IF(ml1.type_id > 3,ml2.master_id,null) as craft_master_id,
    IF(ml1.type_id > 3,ml2.`name`,null) as craft_name,
    IF(ml1.type_id > 3,ml2.item_code,null) as craft_item_code,
    IF(ml1.type_id > 3,ml2.img,null) as craft_img,
    IF(ml1.type_id > 3,ml2.length,null) as craft_length,
    IF(ml1.type_id > 3,ml2.type_id,null) as craft_type_id 
    from 
    (select * from master_list where master_id = 4) ml1
    JOIN 
    (select * from master_list) ml2
    ON ml1.length = ml2.length
    ORDER BY RAND() LIMIT 1;
    

    此查询将准确提供您需要的内容。不需要两个查询即可运行。

    如果没有,则无需添加。仅在块上使用。在代码中。您必须添加精心制作的地方,只需添加 if(craft_master_id) 然后只显示该块,否则不显示。

    【讨论】:

    • 我试过你说的这个。在它周围添加“”后,我没有任何语法错误。我还必须将 4 更改为 $recordID。但是当我运行它时,除了页眉和页脚之外,页面上显示的所有内容都是代码上方的 Div 中调用的项目的名称。
    【解决方案3】:

    而不是

    $crafted = "SELECT * FROM `master_list` WHERE `type_id` <= 3
    AND `length` = $row_master_details.length ORDER BY RAND() LIMIT 1";
    

    试试

    $crafted = "SELECT * FROM `master_list` WHERE `type_id` <= 3 
    AND `length` = ".$row_master_details['length']." ORDER BY RAND() LIMIT 1";
    

    您的查询找不到匹配的东西,因为它将匹配字符串“Arraylength”而不是实际值。

    【讨论】:

    • 好的,我试过了,但仍然不能解决问题。我将在主帖中添加一张图片,展示它的外观。
    猜你喜欢
    • 2012-02-12
    • 2023-03-23
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多