SQL Soru ...

5 Cevap php

Ben o tür veri ve görüntü onay kutuları aracılığıyla, ben bir portföy adıyla grup verilerine gereken bir durum var. İşte tablo yapısı var.

Table A
--------
portfolio_id
portfolio_name

Table B
-------
file_id
portfolio_id (Foreign Key fk_port_id references portfolio_id in table A)
file_name

Temelde Tablo A "bir-çok" ilişki tablo B bağlar.

İşte ben yapmak mümkün olmak istiyorum ne ve yıllar önce ben bir informix veritabanı ile bunu başarmak mümkün, ama ben bunu nasıl hatırlıyorum hatta MySQL ile mümkünse yok. Ben php ve mysql kullanıyorum. Ben kendi portföyü (tablo A) grubu altında dosya adlarını (tablo b) SQL kullanmak istiyorum.

Yani, benim çıkış ben gibi bakmak istiyorum:

 **Portfolio 1**
      Jack's File
      Robyn's File
 **Portfolio 2**
      Joey's file
 **Portfolio 3**
      John's File

Ben bu grubun portföyünde altında dosyaları, sonra bana "GRUPLARI" döngü PHP kullanmak ve verileri görüntülemek için izin verecek kullanabileceğiniz bazı SQL var mı?

Ben yaparak tüm dosyaları almak için başka bir döngü kullanarak bu iç, sonra iki farklı döngüler portföyü için birini kullanarak denedim bir "eğer" o portföyüne aitse karşılaştırmak için, ama bunu alabilirim olmadığını öğrenmek için tercih ediyorum beyanı İlk MySQL dışında.

Ben Informix kullanıldığında, ben sql de bir grup tarafından böyle bir şey yaptım, daha sonra kabuk komut ben "Group By Data" gibi bir şey kullanılan sonra, "Grubu" adını almak için "Group By Kafa Şutu" bir foreach kullanılır Açıkçası benim informix sözdizimi harika bir özellik ..., doğru değil .... Üstbilgi ait verilerin ekran içeriği ... MySQL ile bunu gerçekleştirmek, ya da bunun gibi bir şey olabilir?

Teşekkürler.

5 Cevap

Doğal olarak sizin için yapacak hiçbir vanilya SQL yapı vardır. Benim tavsiyem bir standart açıklamada satırları çekin olacaktır:

Portfolio 1, Jack's file
Portfolio 1, Robyn's File
Portfolio 2, Joey's file
...

ve daha sonra kodda istediğiniz mola koşulu uygulamak. PHP bu gibi bir şey olacaktır:

...
$prevPortfolio = '';
while ($row = mysql_fetch_assoc($query)) {
  $portfolio = $row['portfolio'];
  $file = $row['file'];
  if (prevPortfolio != $portfolio) {
    echo "**$portfolio**\n";
  }
  echo "  $file\n";
  $prevPortfolio = $portfolio;
}

Bu GROUP BY için ne değildir.

GROUP BY işlem özetleri (toplamlar, ortalamalar, sayım, vb) için

Sen tablo A ve tablo B arasındaki sıradan bir iç içe sorgu var

Açıklamasından sizin php döngüler zaten diğer cevabını ileri sürülmüştür ne benzer bir şey, ne may eksik izin vermek için doğru sırayla verileri sağlamak olduğunu yapıyoruz görünür başarılı ...

SELECT
   [A].portfolio_name,
   [B].file_name
FROM
   [A]
INNER JOIN
   [B]
      ON [B].portfolio_id = [A].portfolio
ORDER BY
   [A].portfolio_name,
   [B].file_name

Herhangi bir nedenle veri çiftleri varsa, o zaman can bu ortadan kaldırmak için, veya DISTINCT kullanabilirsiniz GROUP BY, ama ben GROUP BY kullanma eğiliminde ...

SELECT
   [A].portfolio_name,
   [B].file_name
FROM
   [A]
INNER JOIN
   [B]
      ON [B].portfolio_id = [A].portfolio
GROUP BY
   [A].portfolio_name,
   [B].file_name
ORDER BY
   [A].portfolio_name,
   [B].file_name

Sadece her portfolio_id için üzerinden tüm veri elemanları ve döngü seçin. Sonra PHP karşılaştırma mantığı kullanarak çıkış portfolio_id ve dosya bilgisi.

SELECT a.portfolio_name, b.file_id, b.file_name 
FROM a, b 
WHERE a.portfolio_id = b.portfolio_id

Gerekli BY yok GRUBU.

Tüm giriş çocuklar için teşekkür ederiz. Ben doğru çalışması yapmak için bazı önerileri ile benim mevcut döngü değiştirerek sona erdi. Gerçekten bütün bu kodu yapmak istemiyordu, ama belirttiğimiz gibi bu, bunu gerçekleştirmek için php en iyi yoluydu. Yardımlarınız için teşekkürler.