Birden bir açıklamada seçin

2 Cevap php

Bu anlatması zor ama ben gerek

- select id from customers
- foreach customer find the order with that id
-- foreach order (for that customer)
--- select product.name, product.max on order.productId=product.id

Ben bu verileri çekmek için nasıl bilmiyorum. Ben birden fazla ayrı seçer gerekir? (;: P ayrı olarak sayılır '') i bir uzun tek sql deyimi yazabilirsiniz. Nasıl bir satırdan alt satırları çekin yok ......

2 Cevap

Kullanım katıldı:

SELECT c.id, o.id, p.name, p.max
  FROM Customers AS c
       JOIN Orders AS o ON c.id = o.customer
       JOIN Product AS p ON o.productID = p.id

Daha büyük olasılıkla, bir Siparişler tablosu ve bir OrderItems tablo var - sadece uygun koşullar ile JOIN ekstra bir düzey eklemek.

Ben masa anahtar kelime ile çatışmayı önlemek için 'Siparişler' ORDER 'olduğunu varsayalım unutmayın. Ben MAX işlevi Product.Max belirsizlikler giderilmelidir varsayalım vermedi. Sen DBMS sağlar ne hakkında endişelenmenize gerek olabilir (bazı anahtar kelimelerin kötüye hoşgörülü, bazıları değildir).


A hoşgörülü (aşırı hoşgörülü) DBMS IBM Informix Dynamic Server (IDS) 'dir:

CREATE TABLE table(null INTEGER, integer CHAR(3), date DECIMAL(10,0), decimal DATE);

Bu çalışır - bu felaket. Ama daha sonra eklenen anahtar kelimeler ile pek çok sorunları önler.

Eğer tek bir kompozit sorguda ne alırsınız, bir-çok ilişkinin tek sonu için tekrarlayan alan değerlerdir. Yani eğer Foo: Bar :: 1: çok sonra tüm Barlar ve Foos gibi bir şey döner alır sorgusu olarak:

foo1 bar1
foo1 bar2
foo1 bar3
foo2 bar4
foo2 bar17
foo3 bar78

Başka bir tablodaki Baz eklerseniz o Bar: Baz :: 1: çok, o zaman böyle bir şey olsun:

foo1 bar1 baz1
foo1 bar1 baz2
foo1 bar1 baz3
foo1 bar2 baz15
foo1 bar3 baz32
foo1 bar3 baz33
foo2 bar4 baz17
foo2 bar17 baz21
foo3 bar78 baz7

Bu, SQL yapmak gerekiyordu tam olarak ne olduğunu. Eğer güzel bir biçimde çıktı cevabını çalışıyoruz ama bir sorun biraz sunuyor. Foo alanına eşit bir $ tutucu ayarlayın ve yeni foo her loopunuzun geçmesine üzerinde eski birinden farklı olup olmadığını görmek için kontrol içeri uygulama kodu nereye gelir. $ Bar ile aynı yapın. Yani:

$fooholder=NULL;
$barholder=NULL;
foreach ($result as $row_array) {
  if(empty($fooholder)) {
    $fooholder=$row_array['foo'];
    $barholder=$row_array['bar'];
  }

  if ($fooholder!=$row_array['foo']){ //new foo value, so next section
     //output $row_array['foo'] since it's new
     $fooholder=$row_array['foo'];
  }

  if ($barholder!=$row_array['bar']){ //new bar value, so next section
     //output $row_array['bar'] since it's new
     $barholder=$row_array['bar'];
  }

  //output $row_array['baz']

}