2015-04-12 83 views
1

正在创建谁想要在网上卖杂货查询排序包含在MySQL逗号分隔值

客户端的电子商务项目,我有一个价格栏,将包含产品的逗号分隔价格为各自的列数量。问题是我可以通过'价格从高到低''价格从低到高'功能。

这是示例表

**id** **Price**   **Quantity**   Name 
     1   20,30,50   250mlgm,500ml,1lt  Coca-Cola 
     2   40,60,70   250mlgm,500ml,1lt  Pepsi 

现在的问题是查询会是什么样子,如果我想从低的价格列进行排序,以高或低

按价格排序DESC或ORDER BY ASC价格不会在我的情况下工作

请指导我这个

一米乘爆炸逗号填充在选择标签中的每个产品的价格和数量,并将其保存在一个数组这样

<select ><option style='font-size:1vw;' value="Select Unit" >Select Unit</option> 

    <?php 
$drq=$rows['Quantity']; 
$drp=$rows['Price']; 
    $degh=explode(',',$drp); 
$tryGH=explode(',',$drq); 
    for($ij=0;$ij<count($tryGH);$ij++){ 
echo "<option style='font-size:1vw;' value=$degh[$ij] >$tryGH[$ij]&nbsp;-&nbsp;$degh[$ij]</option>"; 
    } 
    ?> </select> 

的结果看起来是这样的

enter image description here

+0

你不能因为这些值是字符串,而不是整数。您可以稍后在PHP中执行此操作。为什么不把价格和数量作为单独配对存储(例如,有9行以上)? – chris85

+0

不是戈纳发生,你需要做许多到许多表的价格和数量与ID为FK – Bsienn

+0

嗯..单个产品的各个不同的行将导致一个冗长的表..我认为我必须删除按功能排序可变数量的商品可变数量 – user3225075

回答

1

您可以安排您的数据库的几种方法。一种方法是

**id** **Price**   **Quantity**   Name 
     1   20   250mlgm   Coca-Cola 
     2   30   500ml    Coca-Cola 
     3   50   1lt    Coca-Cola 

然后在你的代码,你可以输出到客户端与

<select name="unit" > 
    <option style='font-size:1vw;' value="Select Unit" >Select Unit</option> 
<?php 
$query = 'select Quantity, Price, Id, Name from Products ORDER BY name asc, Price DESC'; 
//execute the query, I don't know your driver 
while($row = FETCH_FROM_YOUR_DRIVER) { 
    $quantitY = $row['Quantity']; 
    $price = $row['Price']; 
    $id = $row['Id']; 
    $company = $row['Name']; 
    echo "<option style='font-size:1vw;' value='$id'>$quantity&nbsp;-&nbsp;$price&nbsp;$company</option>"; 
}?> 
</select> 

选择值那么你应该把它们选择ID并从数据库查询价格。在你现在的代码中,我认为你直接从客户那里获得价格。然而,客户端可以操作该送你的价格0

更新:

<style type="text/css"> 
.container { 
    display:block; 
    float:left; 
    margin:15px; 
} 
</style> 
<?php 
$query = 'select Quantity, Price, Id, Name from Products ORDER BY name asc, Price DESC'; 
//execute the query, I don't know your driver 
$count = 0; 
while($row = FETCH_FROM_YOUR_DRIVER /*again not sure of your driver*/) { 
    $products[$count]['id'] = $row['Id']; 
    $products[$count]['price'] = $row['Price']; 
    $products[$count]['quantity'] = $row['Quantity']; 
    $products[$count]['name'] = $row['Name']; 
    $count++; 
} 
/* Can be removed, I haven't set up a DB so this is how I test 
$products = array(array('id' => 2, 'price' => 30, 'quantity' => '500ml', 'name' => 'Coca-Cola'), 
      array('id' => 3, 'price' => 50, 'quantity' => '1lt', 'name' => 'Coca-Cola'), 
      array('id' => 4, 'price' => 20, 'quantity' => '25mlgm', 'name' => 'Pepsi'), 
      array('id' => 5, 'price' => 30, 'quantity' => '500ml', 'name' => 'Pepsi'), 
      array('id' => 6, 'price' => 50, 'quantity' => '1lt', 'name' => 'Pepsi')); 
*/ 
$sameproduct = false; 
foreach($products as $key => $product) { 
    if ($key == 0 || $products[($key - 1)]['name'] != $product['name']) { 
     if ($key != 0) { ?> 
      </select> 
      </div> 
     <?php } ?> 
    <div class="container"> 
     <h4><?php echo $product['name'];?></h4> 
     <img src="/images/LOCATION/<?php echo strtolower(str_replace(array(' ', '-'), '_', $product['name']));?>.jpg" /> <br /> 
    <select name="unit" > 
    <?php } ?> 
     <option style='font-size:1vw;' value='<?php echo $product['id'];?>'><?php echo $product['quantity'];?> - <?php echo $product['price'];?></option> 
<?php } ?> 

这需要你的名字是一致的,还假定在数据库名称图像中的名称相匹配你的文件系统。它用下划线替换名称中的空格和破折号。

+0

好的,但我将如何查询在同一个地方填充同一项目的数量和价格。根据你的答案,我认为用户将得到一个数量和价格选择..如何防止呢?扩展表是好的,但最终用户混淆我似乎并不好。你会对此有何建议?顺便说一句,什么是FETCH_FROM_DRIVER ..我不知道,但我做了一个交叉检查,以验证价格和数量 – user3225075

+0

以上更新如何,有道理? “FETCH_FROM_DRIVER”意味着我不知道您使用的驱动程序,但您需要通过与您使用的任何驱动程序相关的功能来获取数据。你还没有发布你的完整代码,所以我不知道你是如何访问数据库的。 – chris85

+0

但是,如何根据价格对产品进行分类,以便在选择标签中填充价格和数量,并且会有多个产品的数量和价格各不相同 – user3225075

0

尝试使用转换来转换字符串编号,然后对其进行分类

SELECT id, Price, Quantity FROM Products ORDER BY CONVERT(Price, UNSIGNED INTEGER) ASC 
+0

nope,不起作用 – user3225075

+1

这将如何工作?那里有多个值。 – chris85

+0

我在我的测试项目中试过了,它工作正常。价格是根据数量输入的。因此,如果我可以按价格的第一个价值进行排序,那么结果应该是正确的。 CONVERT将字符串转换为数字,以便'20,30,50'转换为20,并基于此进行排序。 – littleibex