PHP Sorgu için okuma Astar

2 Cevap php

Ben PHP için yeni bir proje için benim kendi CMS üzerinde çalışıyor. Çoğunlukla sadece kendime dil öğrenmek için bir proje vermek için. CMS çalışıyor ama sadece bazı hatalar aşağı takip ediyorum. Yani burada gidiyor ...

I am trying to list all of my published articles for each section. It does this correctly but I am having an issue in the code statement that follows around the line of

    echo '</br></br><br>'.ucfirst($row['section']).' Articles: '; //['section'] is the name

Şimdi ben bütün bölümleri gösteriyorum Eğer onun doğru, ben sadece bir bölümü ile giderseniz artan onun sorgulama, ama her zaman sadece onun şu anda için yazılar gösteren bölümüne alır asla ilk bölümün bölüm adını gösterir çünkü . Ben bir makale özledim dont bölüm adını almak için okumak bir ilk astar, daha sonra while ($stories = $result->fetch_assoc()) için döngü döngü içinde geri 0 kez sıfırlamak olabilir bir yolu var mı?

Ben bu yüzden bölüm id sayının kendisi ile bölümün adını alabilir katılmak kullanmak için yeniden bir çalışma vardı. Ben katıldı sql deyimi sadece ihtiyacım olanı yapar. Ben bölüm adını ve daha sonra makale sayısı listeledik sonrasına kadar (while ($stories = $result->fetch_assoc())). Ama ben katıldı açıklamaya çağrı başlatarak değilim

//query for getting the sections to the list each ones articles
$querySection = 'select * from sections order by section asc';
  $resultSection = $handle->query($querySection);

if ($resultSection->num_rows) 
  {

//hard coded to only show the scection ONE time... 
//SQL repeats the rows the number of sections there are. So lets cheat.
if(isset($sectionHolder) && $sectionHolder > 0)
 $counterHolder = 9998;
else
 $counterHolder = 0;

while ($row = $resultSection->fetch_assoc()) 
{ 

 if(isset($sectionHolder) && $sectionHolder > 0) 
  //we are looking at one specific section
  $query = 
  'select articles.*, sections.section
  from articles 
  INNER JOIN sections
  ON art_sec=sections.id
  where articles.art_sec = \''.$sectionHolder.'\' and articles.published IS NOT NULL 
  ORDER BY sections.section, articles.headline asc
  ';
 else //just looping through everything we have...
  $query = 'select * from articles where art_sec = \''.$row['id'].'\' and published IS NOT NULL order by art_sec asc';

 $result = $handle->query($query);


 if($result->num_rows > 0 && $counterHolder != 9999)//we have a defined section to go into
 {


echo '</br></br><br>'.ucfirst($row['section']).' Articles: ';
echo $result->num_rows;
echo '</br></p>';

 if ($result->num_rows) 
 {
  echo '<table width="90%">';
  echo '<tr><th>Headline</th>';
  echo '<th>Modified</th></tr>';
  while ($stories = $result->fetch_assoc()) 
  {
   echo '<tr><td width="75%">';
   echo $stories['headline'];
   echo $stories['sections.section'];
   echo '</td><td>';
   echo date('m-j-y, h:i', $stories['modified']);
   echo '</td><td>';

   //add to array
   $array[] = $stories['id']; // add every ID on this page to the array.
  } //end while of stories

 echo '</table></br></br></br></br>';
 $counterHolder += 1; //adds one to only come in once if the section is selected or all times if its all sections.
  } // end if results num rows
 }//end if results num rows >0 and counter != 9999
}//end while row-fetch
}//end if ResultSection-numrows

Maybe someone could also try and help me figure out a way to take out the delimiter of counter. I messed around with other ways but that was the only logic I could come up with to solve my problem, and it just doesnt seem like a very effective way to code. The issue was that when I was looking at just one section and it had 5 articles, it would show the section Name then list its 5 articles, 5 times, vs only being done once. So I have a counter going to only go inside the loop one time, if a section is passed in.

Ben çok yayınlanmıştır ve onu yıkmak için ihtiyacınız varsa, bu burada benim ilk yazı olduğunu, daha adil (ben daha fazla bit ve parçalar daha iyi anladım) söyleyin. Gerekirse ben de kod tüm sayfayı sonrası olabilir.

Teşekkürler

2 Cevap

Eğer ilk SQL deyiminde bir yere hüküm koyabilir misin?

Örneğin select * from sections where secionId = $sectionId order by section asc

Ben bir bölümünde ve uygulama seçtiğiniz bölümü ve makaleleri gösteren bir sayfaya götürecektir bunu yaparak tıklayınız sürer?

Ben senin sorunun zaten çıkış baskı yaparken size ilk kez veri yineleme aracılığıyla bu yatıyor düşünüyorum. Bu oldukça esnek kod yapar. Verimli, ama esnek değil kaynak.

İşte bunun yerine ne yapabileceğini bulunuyor:

  1. Eğer bölümleri ve makaleler sorgulama bitirdikten sonra, kendi bölümleri yapacak bir dizi yapmak.
  2. ilgili makaleler ile bu bölümlerin her birinde bir makale dizi koydu
  3. döngü olsa foreach, ve daha sonra bir olanlarda makalelere foreach ile bölümünde dizi

Birinci ve ikinci öğe gerçekleştirmek için aşağıdakileri yapın:

$sections = array();
$result = $handle->query($query);
if($result)
 while ($storie = $result->fetch_assoc()) {
  $article = array();
  $article["stuff"] = $storie["stuff"];
  /* replace "stuff" with things you need from your query */
  $sections[$stories['section']][$stories['articleName'] = array('stuff'=>'some value');
 }

foreach($sections as $sectionName=>$articles)
 foreach($articles as $articleName=>$article)
  // print your stuff here
  // at this point you have all your data organised and you
  //   could've gone though it easily before the 2 foreaches
  //   to search for other stuff you needed.