2016-03-23 17 views
1

Ürünlerimizi içeren çok büyük bir veritabanım var ve her ürün birkaç farklı varyanta sahip. Tablonun yapısı şu şekildedir: vbOrtak alanı olan birleşik satırları göster

id | Name | VariantName | dim1 
1 | Smth | SmthCool  | 120 
2 | Smth | SmthHot  | 160 
3 | Smth | SmthRed  | 320 
4 | Othr | OthrCool  | 220 
5 | Othr | OthrBlue  | 128 

... Şimdi

, ben çıkış şey olurdu ki, Ad alanına dayalı veri getirmek için muktedir istiyorum gibi:

Name: Smth 
Variant 1: SmthCool Dimensions: 120 
Variant 2: SmthHot Dimensions: 160 
Variant 3: SmthRed Dimensions: 320 

Şu anda Ad değerine dayalı tüm girdileri çıktılar bir kod bulduk, ancak yukarıda gösterilen gibi onları kombine gerekir.

<?php 
$dbhost = 'localhost'; 
$dbuser = 'user'; 
$dbpass = ''; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
$sql = 'SELECT id, Name, VariantName, dim1 
     FROM products 
     WHERE VariantName="something"'; 

mysql_select_db('test'); 
$retval = mysql_query($sql, $conn); 
if(! $retval) 
{ 
    die('Could not get data: ' . mysql_error()); 
} 
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) 
{ 
    echo "ID :{$row['id']} <br> ". 
    "Name: {$row['Name']} <br> ". 
    "Variant name: {$row['VariantName']} <br> ". 
    "Dimensions: {$row['dim1']} <br> ". 
    "--------------------------------<br>"; 
} 
echo "Fetched data successfully\n"; 
mysql_close($conn); 
?> 

Herhangi bir yardım çok takdir edilecektir!

+2

toplam noobs, bu gibi tabloları biçimlendirmez. – buffjape

+0

Neden 'mysql_' işlevlerini kullanıyorsunuz? – trincot

+0

@buffjape: Ben bir grafik tasarımcısıyım, kodu nasıl biçimlendireceğimi biliyorum, ama aslında kendimi yazmak için yeterince öğrenmedim. –

cevap

0

Dunno o mysqli ile etiketlenen, ancak yine mysql_ * işlevleri kullanarak çıkmak zorunda olduğu, burada one the best features of PDO kullanan çözümdür neden:

$dbhost = 'localhost'; 
$dbuser = 'user'; 
$dbname = 'test'; 
$dbpass = ''; 
$dbcharset = 'utf8'; 

$dsn = "mysql:host=$dbhost;dbname=$dbname;charset=$dbcharset"; 
$opt = [ 
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
    PDO::ATTR_EMULATE_PREPARES => false, 
]; 
$pdo = new PDO($dsn, $dbuser, $dbpass, $opt); 

$sql = 'SELECT Name, id, VariantName, dim1 FROM products WHERE VariantName=?'; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(["something"]); 
$data = $stmt->fetchAll(PDO::FETCH_GROUP); 

ve burada $data değişkeninde isme göre gruplandırılmış iç içe geçmiş bir dizi olacak

<? foreach($data as $name => $products): ?> 
    Name: <?=$name?><br> 
    <? foreach($products as $row): ?> 
     Variant <?=$row['id']?>: <?=$row['VariantName']?> Dimensions: <?=$row['dim']?> 
    <? endforeach ?> 
<? endforeach ?> 
+0

Bunun neden aşağıya düştüğünü anlamıyorum. Bu bağlamda PDO ve FETCH_GROUP kullanımı takdir edilmelidir. Benim oyumu aldın. – trincot

+0

Teşekkürler! Mükemmel çalışıyor! Bir soru daha: Bir metin kutusuna girebildiğim bir şeyi "bir şey" yapmak için ne kadar iş gerekir? İki ayrı sayfayı tazelemeye/yenilemeden çalışmasını sağlamak için jQuery kullanmalı mıyım? –

+0

@SebastianPelan Eğer yenileme yapmadan çalışması gerekiyorsa Javascript/Ajax kullanmanız gerekecek. – YounesM

0

İlk önce ilk şeyler, lütfen PHP 5.5'ten beri kullanımdan kaldırılan ve tamamen PHP 7'den kaldırılan mysql işlevlerini kullanmayın. Bunun yerine, PDO veya mysqli kullanın.

Bu söyleniyor

, bu nedenle sizin ifadeniz böyle olmalı veritabanından Adı isim karşılık satır getirmek için çalışıyoruz:

$name="Smth"; 
$sql = "SELECT id, Name, VariantName, dim1 
     FROM products 
     WHERE Name=".$name; 

Ayrıca yukarıdaki yapmak prepared statements kullanabilirsiniz.

Ve döngü önce:

echo "Name = ".$name."<br>"; 
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) 
{ 
    echo "Variant {$row['id']}: {$row['VariantName']} Dimensions: {$row['dim1']}; 
} 
İlgili konular