Çıkışlar Tüm eksi bir

3 Cevap php

Belirli bir foruma kimliği ile bütün konuları çıkış için bu kodu kullanabilirsiniz

$query = mysql_query("SELECT * FROM forums JOIN threads ON threads.fid = forums.id WHERE     forums.id = ".intval($_GET['forumID']));
$forum = mysql_fetch_assoc($query);

?>

<h1><a>Forums</a> &gt; <?=$forum['name']?></h1>

<?php while ($thread = mysql_fetch_array($query)): ?>

<?=$thread['title']?>

<?php endwhile; ?>

forums
id, name, description

threads
id, title, message, fid

Şey bir hastamızda bütün konuları çıktılar olmasıdır. Ben birini kaldırırsanız sadece başka gizler. Neden ki?

Gerçekten yardıma seviniriz!

Üzgünüm benim İngilizcem iyi değil, ben (bu durumda 1) fid = ile ipler 4 kayıtları var diyelim, sadece 3 tanesi çıktılar

3 Cevap

Çizgiyi 2 Mysql_Fetch_Assoc döndürülen ilk satırı kullanıyor. Sizin süre döngü durumda, mysql_fetch_array fonksiyonu olacak sql sorgunun ikinci satırda değil, birinci ile başlar. Bu nedenle, ilk satırdan kimliği listenizde eksik. Eğer sütun adını kullanmak Ancak, aynı zamanda mysql_fetch_array değil, mysql_fetch_assoc kullanmalısınız. Bu size herhangi bir kimlikleri vermemelidir.

Eğer bekliyoruz daha az bir konuları var nedeni 2. satırda ilk iplik getiriliyor, ama sadece forum adını görüntülemek için kullanıyor olmamız. Daha sonra ise döngü içinde ikinci sırayı alıp konuları listelemek için oradan başlamak - ilk satır eksik.

Ben şöyle, PHP do..while kontrol yapısını kullanarak kodunuzu refactor istiyorum:

$query = mysql_query("SELECT * FROM forums JOIN threads ON threads.fid = forums.id WHERE forums.id = ".intval($_GET['forumID']));
$thread = mysql_fetch_assoc($query);

if ($thread != null) {
    echo "<h1><a>Forums</a> &gt; $thread['name'] </h1>";

    do {
        echo $thread['title'];
    } while ( $thread = mysql_fetch_array($query)) );
}

Txwikinger işaret ettiği gibi, dizi göstericisi mysql_fetch_assoc() tarafından ileri taşınır, bu yüzden kullanmak ilk kez mysql_fetch_array(), ikinci satır alırsınız. Sen dizisi ikinci kez kullanmadan önce mysql_data_seek() ile dizi işaretçi döndürebilirsiniz.

 mysql_data_seek($query, 0);

Daha doğrusu bir küçük sorguda forum adını almak için, ama bir iki sorguları kullanmak için kodunuzu yeniden istiyorum, ve bir başka sorguda bütün konuları alır.