2016-07-26 10 views
0

ich in einem Array habe eine Tabelle wie folgt aus:Php: Gruppe und Feld verpasst add

cid plugin lang_id  name father 
1 Newspage 1 Actualidad 1 
1 Newspage 2 News 1 
2 Newspage 1 Tecnologia 1 
2 Newspage 2 Tech 1 
3 Newspage 1 Deportes 1 
3 Newspage 2 Sports 1 
4 Newspage 1 Ocio 1 

In diesem Beispiel gibt es zwei Sprachen (1: Spanisch und 2: Englisch), aber Admin kann weitere Sprachen hinzufügen

Ich möchte einen "Kategorie ändern" Abschnitt und gruppieren sie nach CID mit Eingabefeldern für jede Sprache, wenn Sprache fehlt Ich möchte eine leere Eingabe für die fehlende Sprache anzeigen.

Etwas wie folgt aus: http://i.imgur.com/fGCUgKc.png

Meine tatsächlichen schlechten Code seine dies:

$content = "<div class='catlist'>";  
$content .= "<p>{$LANGDATA['L_NEWS_MODIFIED_CATS']}</p>"; 
$query = $db->select_all("categories", array ("plugin" => "Newspage", "lang_id" => 1)); 

while ($cat_grouped = $db->fetch($query)) { 
    $content .= "<form id='cat_mod' method='post' action=''>"; 
    $content .= "<div>"; 

    foreach ($langs as $lang) { 
     if ($lang['lang_id'] == $cat_grouped['lang_id']) { 
      $content .= "<label>{$lang['lang_name']}</label> <input type='text' name='{$lang['lang_id']}' value='{$cat_grouped['name']}' />"; 
     } else {         
      $query2 = $db->select_all("categories", array ("plugin" => "Newspage", "cid" => "{$cat_grouped['cid']}", "lang_id" => "{$lang['lang_id']}")); 
      if($db->num_rows($query2) <= 0) { 
       $content .= "<label>{$lang['lang_name']}</label> <input type='text' name='{$lang['lang_id']}' value='' />"; 
      } else { 
       $other_lang_cat = $db->fetch($query2); 
       $content .= "<label>{$lang['lang_name']}</label> <input type='text' name='{$lang['lang_id']}' value='{$other_lang_cat['name']}' />"; 
      } 
     } 
    } 
    $content .= "<input type='hidden' name='cid' value='{$cat_grouped['cid']}' />"; 
    $content .= "<input type='submit' name='ModCatSubmit' value='{$LANGDATA['L_NEWS_MODIFY']}' />"; 
    $content .= "</div></form>"; 
} 
$content .= "</div>"; 

Dieses:

$db->select_all(...); 

mittlere $ db-> select_all ("table", $ WO, ...)

ich wan t, um alle Inhalte in einer Abfrage abzurufen und die Arbeit in php

Mein tatsächlicher Code ist es eindeutig sehr schlecht und angenommen, lang_id=1 existiert für jeden Eintrag und tun einige Abfrage huh!

Mein alten Code verwenden „GROUP BY cid“ für die erste Abfrage und nicht verwenden müssen „lang_id = 1“, aber nach einem System-Upgrade dieser Zeile gibt den Fehler:

berichtet: Expression # 3 von SELECT-Liste ist nicht in der GROUP BY-Klausel und enthält nicht aggregierte Spalte

und möchte das nicht noch einmal verwenden.

irgendeine idee der beste weg dafür?

+1

Ich weiß nicht, wie die anderen, aber meine Antwort auf Ihre Frage nicht klar ist, was Sie wirklich wollen. Ich schlage vor, Sie interveniert Eingabe-Array, und Sie möchten erhalten oder ausgeben. – rad11

+0

besserer Code, mein tatsächlicher Code (ich poste es) sein sehr schlechtes und involve wenige Fragen ... – knack

Antwort

0

Ich weiß nicht, was Ihre Datenbank-Bibliothek ist, also schreibe ich einen Pseudo-ähnlichen Code.

Zuerst würde ich eine Seitenumbruch verwenden, um die Datenbankabfragen zu begrenzen, zum Beispiel 10/20 Sätze für jede Seite. So würde die Abfrage sein:

SELECT * FROM language_phrases WHERE cid IN (
    SELECT DISTINCT cid FROM language_phrases WHERE plugin = 'Newspage' 
    LIMIT 0,10 
) 

dann würde ich die Daten aus der Datenbank verwenden, zuerst erhalten die cid Werte:

$cid = array(); 
$strings = array(); 

while($row = $db->fetch($result)) 
{ 
    if(!in_array($cid,$row["cid"])) 
    { 
     $cid[] = $row["cid"]; 
    } 
    $strings[]= array(
     "cid" => $row["cid"], 
     "lang_id" => $row["lang_id"], 
     "name" => $row["name"], 
     "father" => $row["father"] 
    ); 
} 

Dann würde ich den Tisch haben und die unterschiedlichen Cids in dieser Seite in meiner Puffer. Dann wird PHP den Rest erledigen:

+0

danke, ich machte andere Version einfacher (ich poste es), aber wird später Ihren Code/Weg überprüfen, heute brauchen Sie einen Kaffee. :) – knack

0

Dieses Problem gibt Kopfschmerzen, aber ich habe eine andere Version, die Arbeit und nur eine Abfrage.

Ich werde später die Taha Paksu Version/Art und Weise überprüfen (danke!)

$content = "<div class='catlist'>";  
$content .= "<p>{$LANGDATA['L_NEWS_MODIFIED_CATS']}</p>"; 
$query = $db->select_all("categories", array ("plugin" => "Newspage"), "ORDER BY cid"); 

$cats = []; 
$catsids = []; 
while ($cats_row = $db->fetch($query)) { 
    $cats[] = $cats_row; 
    $catsids[] = $cats_row['cid']; 
} 
$catsids = array_unique($catsids); 
$foundit = 0; 
foreach ($catsids as $catid) { 
    $content .= "<form id='cat_mod' method='post' action=''>"; 
    $content .= "<div>";   
    foreach ($langs as $lang) { 
     foreach ($cats as $cat) {      
      if (($catid == $cat['cid']) && ($cat['lang_id'] == $lang['lang_id'])) { 
       $content .= "<label>{$lang['lang_name']}</label> <input type='text' name='{$lang['lang_id']}' value='{$cat['name']}' />"; 
       $foundit = 1; 
      }     
     } 
     if ($foundit == 0) { 
      $content .= "<label>{$lang['lang_name']}</label> <input type='text' name='{$lang['lang_id']}' value='' />"; 
     }     
     $foundit = 0;     
    } 
    $content .= "<input type='hidden' name='cid' value='$catid' />"; 
    $content .= "<input type='submit' name='ModCatSubmit' value='{$LANGDATA['L_NEWS_MODIFY']}' />"; 
    $content .= "</div></form>"; 
}