Bu sorgu bir döngü olmadan yapılabilir mi?

4 Cevap php

Yani, temelde, örneğin, 'konu' denilen ve başka bir 'cevap' adlı bir MySQL tablo var. Tablo 'konular' olarak, bir forum bölümüne bu konuyu ilgili 'relforum' denilen bir alan var. Ve tablodaki bir konuya cevap ilgilidir 'reltopic' denilen bir alan var, 'cevap'. Her iki tablo bir id alanı, auto_increment birincil anahtar var.

Şimdi, belli bir forum tüm yanıtları seçmek istiyorum. 'Yanıt' hayır 'relforum' alanını olduğundan, benim şekilde olacaktır:

  • Içlerinden belirli forum ve döngü eşit 'relforum' tüm konuları seçin
  • Döngüde iken, şu anda 'işlenmiş' ediliyor konunun tüm yanıtları seçin
  • Içlerinden sonra bir çok boyutlu bir dizi, loop tüm fetch_array sonuçları Birleştirme.

Yani böyle bir şey var:

$query = mysql_query("SELECT * FROM `topics` WHERE `relforum` = '1'");
while($array = mysql_fetch_array($query)) {
    $temp = mysql_query("SELECT * FROM `replies` WHERE `reltopic` = {$array['id']}");
    $results[] = mysql_fetch_array($temp);
}

Daha az sorgular içine tüm bu birleştirmek için bir yolu var mı? Bu süreç temelde bu forumda artı bir konu başına bir sorguyu çalıştırın çünkü. P: Bu çok fazla olurdu

Yanıtlar tabloya relforum alanı ekleme (bunu eklemek için bir sorun değil bu yüzden hala DB Bölüm tasarlama) bir çözümdür, ama ben bir çözüm varsa görmek isterim.

Ben sadece temel SELECT / INSERT / UPDATE biliyorum, ve ben genellikle PHPMyAdmin kullanarak son iki olanları oluşturmak, gerçekten SQL şeylerde iyi değilim, bu yüzden ... Ben biraz yardıma ihtiyacım var sanırım.

Okumak için teşekkürler!

4 Cevap

Siz temelde iki tablo birleştirmek gerekir.

SELECT * FROM `replies`, `topics` WHERE `replies`.`reltopic` = `topics`.`id` AND `topics`.`relforum` = '1';

Sen katılır kullanmayı öğrenmek gerekir. Aşağıdaki bağlantı SQL server için ama MySQL için teori hemen hemen temel katılır için aynıdır. 18 yıl modası geçmiş ve bir porr pracitce olarak virgül tabanlı katılır kullanmayın lütfen. ANSII standart katılır kullanmayı öğrenin.

http://www.tek-tips.com/faqs.cfm?fid=4785

Bir veritabanına erişen, herhangi bir döngü kullanmak istediğiniz hemen hemen hiç. Veri tek tek satır kümeleri üzerinde çalışmasına sorulduğunda Veritabanları iyi gerçekleştirmek için tasarlanmıştır. Yani döngü düşünmeye durdurmak ve ihtiyacınız veri kümesi hakkında düşünmeye başlamak gerekir.

SELECT r.* FROM replies r, topics t
WHERE t.relforum = 1 AND r.reltopic = t.id

backquotes kurtulmak. onlar standart olmayan konum ve kodu yığılmayı

Evet, burada bir join kullanmalısınız. Ancak size sonuç kümesini işleme daha fazla dikkat etmesi gerekir.

Katıldı bir ilişkisel veritabanı şema temel sorgu vardır. Bilgi cephanelik ekleyebilirsiniz :)