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


SELECTING DISTINCT values from two different COLUMNS of the same table

我有一个像这样的sql表。

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

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

选择1:

<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查询应该我需要使用,以获得基于第2选择框的值。我尝试了很多找到解决方案,但我没有找到任何解决方案,得到它的值从数据库…

你可能不需要第二次查询和所有这些复杂性,如果你做的事情有点不同。这意味着,您可以使用一个查询实现您的目标。下面的代码演示了如何操作。注意:这个解决方案使用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>