从同一个表的两个不同列中选择不同的值

Posted

技术标签:

【中文标题】从同一个表的两个不同列中选择不同的值【英文标题】:SELECTING DISTINCT values from two different COLUMNS of the same table 【发布时间】:2017-01-26 03:32:18 【问题描述】:

我有一个 sql 表是这样的。

id     name     cname
1      Ash      abc       
2      Ash      abc
3      Ashu     abc
4      Ashu     xyz
5      Yash     xyzz
6      Ash      xyyy

我希望用户从显示 DISTINCT 名称值及其工作正常的第一个选择下拉列表中选择一个值。

第一个选择:

<select id="select1" required="required" class="custom-select standard">
<option value="0" selected="selected">Choose Category</option>
<?php 
    $resultd = mysqli_query($mysqli,"SELECT DISTINCT name FROM advertise");
    if ($resultd)
        
              while($tier = mysqli_fetch_array($resultd)) 
                
                    echo '<option value="' .$tier['name'] . '">' . $tier['name'] . '</option>';
                
        
?>
</select>

现在我想根据第一个显示第二个选择下拉框的值。我为此使用的 Jquery 是:

<script>
    $(function()
    var conditionalSelect = $("#select2"),
    // Save possible options
    options = conditionalSelect.children(".conditional").clone();

    $("#select1").change(function()
    var value = $(this).val();                  
    conditionalSelect.children(".conditional").remove();
    options.clone().filter("."+value).appendTo(conditionalSelect);
).trigger("change");
);
</script>

第二个选择框

<select id="select2" required="required" class="custom-select standard">
<option value="0" selected="selected">Choose Location</option>
<option class="conditional name" value="">cname</option>
</select>

我只想知道我应该使用什么 php 查询来获取第二个选择框中的值。我尝试了很多寻找解决方案,但我没有找到任何从数据库中获取其值的解决方案......提前致谢......

【问题讨论】:

可能与***.com/questions/9901061/cascading-select 或许多其他 PHP 级联选择问题中的任何一个重复 你想在第一个下拉列表选择中获得什么,我的意思是第二个? @AT-2016 如果用户从第一个下拉列表中选择 Ash,我想要 abc 和 xyyy。如果他/她选择 Ashu 然后 xyz,如果选择 Yash xyzz... 【参考方案1】:

如果你做的事情有点不同,你可能不需要第二个查询和所有这些复杂性。这意味着,您可以使用一个查询来实现您的目标。下面的代码演示了如何。 注意:此解决方案使用 JQuery 使事情变得更简单。

测试一下; 只需复制并粘贴代码 按原样 到一个新文件中看看它是否像你预期的那样工作。

干杯,祝你好运!!!

<?php

    // USE YOUR CONNECTION DATA... PDO WOULD BE HIGHLY RECOMMENDED.
    // INTENTIONALLY USING mysqli (NOT RECOMMENDED) TO MATCH YOUR ORIGINAL POST.
    $conn       = mysqli_connect("localhost", "root", 'root', "test");
    if (mysqli_connect_errno())
        die("Failed to connect to MySQL: " . mysqli_connect_error());
    

    $resourceID = mysqli_query($conn, "SELECT * FROM advertise");
    $all        = mysqli_fetch_all($resourceID, MYSQLI_ASSOC);
    $uniques    = [];
    $options1   = "";

    if( !empty($all) )
        foreach($all as $intKey=>$advertiseData) 
            $key    = $advertiseData['name'];
            $cName  = getCNameForName($all, $key);
            if (!array_key_exists($key, $uniques)) 
                $uniques[$key] = $advertiseData;
                $options1 .= "<option value='$key' data-cname='$cName'>";
                $options1 .= $key . "</option>";
            
        
    

    function getCNameForName($all, $name)
        $result = [];
        foreach($all as $iKey=>$data)
            if($data["name"] == $name)
                $result[] = $data['cname'];
            
        
        return $result ? implode(", ", array_unique($result)) : "";
    
?>

<html>
<body>
<div>
    <select id="select1" required="required" class="custom-select standard">
        <option value="0" selected="selected">Choose Category</option>
        <?php echo $options1; ?>
    </select>
    <select id="select2" required="required" class="custom-select standard">
        <option value="0" selected="selected">Choose Location</option>
    </select>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">

    (function($) 
        $(document).ready(function()
            var firstSelect     = $("#select1");
            var secondSelect    = $("#select2");

            firstSelect.on("change", function()
                var main        = $(this);
                var mainName    = main.val();
                var mainCName   = main.children('option:selected').attr("data-cname");
                var arrCName    = mainCName.split(", ");
                var options2    = "<option value='0' selected >Choose Location</option>";

                for(var i in arrCName)
                    options2   += "<option value='" + arrCName[i]  + "' ";
                    options2   += "data-name='" + mainName + "'>" + arrCName[i] + "</option>\n";
                

                secondSelect.html(options2);
            );

        );
    )(jQuery);
</script>

</body>
</html>

【讨论】:

我正在处理类库下拉列表,我无法找到一个 mysql 查询,该查询显示第二个下拉选项类中名称列的值和第二个下拉选项值字段中 cname 列的值。 .

以上是关于从同一个表的两个不同列中选择不同的值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 从两列中选择不同的值

从所有列中选择不同的值

从同一个表中的多个列中选择不同的值

如何创建临时表或仅从循环中的列中选择不同的值

从 SQLITE 中的两列中选择不同的值

从数据库中选择一列中的值不同且限制为 5 个最新的行