Zum Inhalt springen

Leere Zellen einer Tabelle mit PHP auffüllen


Empfohlene Beiträge

Hallo,

ich verzweifel schon seit geraumer Zeit an einem kleinen Problem:

Ich würde gerne Stichworte zu einem Oberbegriff immer in einer Tabelle darstellen.

Dabei kann ich die Zeilen für den Oberbegriff berechnen und entsprechend zusammenfassen. Die Stichworte stelle ich 3-Spaltig dar (wobei das austauschbar sein soll).

Jetzt kommt folgendes Problem:

Oberbegriff - Anzahl der Stichworte - Anzahl der Darzustellenden Zellen - Zellen die aufgefüllt werden müssten

Regionen - 5 - 6 - 1

Bundesländer - 2 - 3 - 1

Veranstaltungsart - 4 - 6 - 2

(Beispielbild des Ergebnisses habe ich angehängt)

Hier mein Code:

  $qry="SELECT t.tagid, t.tgroupid, t.label, g.label
FROM pragmamx.hds_rss_tags t, pragmamx.hds_rss_taggroups g
WHERE t.tgroupid = g.tgroupid
ORDER BY g.sortorder ASC,t.label ASC";
//echo "$qry<p>";
$result = sql_query($qry);
if($result){
$Anzahl=mysql_numrows($result);
$lastgroup=0;
while(list($tagid, $tgroupid, $label, $grouplabel) = sql_fetch_row($result)) {
// 2. Abfrage da ich keinen JOIN kann / ID>0 heisst das die Checkbox ausgewählt werden muss
$qryx="SELECT id FROM pragmamx.hds_tagging_autotags WHERE tagid='$tagid' AND rssid='$rssid'";
//echo "$qryx<p>";
$resultx = sql_query($qryx);
list($Value) = sql_fetch_row($resultx);
$Row++;

if ($lastgroup!=$tgroupid) {
$i=1;
// 3. Abfrage zur Ermitteltung der Anzahl je Gruppe
$qryc="SELECT count(*) FROM pragmamx.hds_rss_tags WHERE tgroupid='$tgroupid'";
//echo "$qryc<p>";
$resultc = sql_query($qryc);
list($count) = sql_fetch_row($resultc);
$countrow=ceil($count/$spalten); // Anzahl der Reihen ermitteln und auf Ganzzahl setzen
$tabletd = $countrow * $spalten; // Anzahl der Zellen ermitteln, wenn Spalte vollständig sein soll
$missingtd = $tabletd - $count; // Anzahl der "leeren" Zellen ermitteln zum auffüllen
echo "$grouplabel - $count - $tabletd - $missingtd<br>";
//if ($GroupID==0)
$out.="<tr bgcolor=\"$bgcolor2\"><td rowspan=\"$countrow\" valign=\"top\">$grouplabel</td>"; // Zwischenüberschrift Gruppenname
$lastgroup=$tgroupid;
}
$out.="<td bgcolor=\"$bgcolor3\"><input type=checkbox name=\"tagbox[]\" ".(($Value>0) ? "checked " : "")."value=$tagid> $label  </td>";
if($i==$spalten) {
$out.="</tr><tr bgcolor=\"$bgcolor2\">";
$i=0;
}
$i++;
}
// //if ($missingtd>=1) {
// for($m = 1; $m < $missingtd; $m++)
// {
// $out.="<td> </td>";
// }
// // }
}
return $out;[/PHP]

Ich hoffe jemand kann mir helfen den Knoten in meinem Gehirn zu lösen und mir erklären, wie ich es hinbekomme die fehlenden Zellen aufzufüllen.

Vielen Dank

Kay

post-64752-14430448514055_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

ein Thema = ein Thread => http://forum.fachinformatiker.de/datenbanken/131666-anzahl-datensaetze-ermitteln-gruppe.html

wie schon gesagt, mache ein Pivot aus Deinem Query, damit lässt es sich dann sehr viel kompakter lösen. Damit ist Dein Code auch verständlicher

 [...]
$resultc = sql_query($qryc);
list($count) = sql_fetch_row($resultc);
$countrow=ceil($count/$spalten); // Anzahl der Reihen ermitteln und auf Ganzzahl setzen
$tabletd = $countrow * $spalten; // Anzahl der Zellen ermitteln, wenn Spalte vollständig sein soll
$missingtd = $tabletd - $count; // Anzahl der "leeren" Zellen ermitteln zum auffüllen
echo "$grouplabel - $count - $tabletd - $missingtd<br>";
[...]
[/PHP]

Außerdem kann man das über den Modulo Operatir berechnen. Was ich auch schon in dem älteren Post angemerkt hatte

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

im ersten Post ging es mir ja noch darum die Zeilen der Gruppierungen zusammen zu ziehen. Das klappt ja mittlerweile sehr gut.

OK, das mit Modulo seh ich auch ein, auch wenn das Ergebnis bei mir auch vorhanden ist, nur wahrscheinlich halt umständlicher.

Nach Pivot hab ich schon länger rumgesucht, aber nichts brauchbares gefunden, was ich verstehe. Da ich ehrlich gesagt schon Probleme bei einem einfachen JOIN habe, ist das wohl eine Nummer zu hoch, oder?

Du wirst ja in meinem Code gesehen haben, dass ich mehrere Abfragen verwenden, weil ich JOINS nicht kapiere.

LG

Kay

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...
Hallo,

im ersten Post ging es mir ja noch darum die Zeilen der Gruppierungen zusammen zu ziehen. Das klappt ja mittlerweile sehr gut.

OK, das mit Modulo seh ich auch ein, auch wenn das Ergebnis bei mir auch vorhanden ist, nur wahrscheinlich halt umständlicher.

Nach Pivot hab ich schon länger rumgesucht, aber nichts brauchbares gefunden, was ich verstehe. Da ich ehrlich gesagt schon Probleme bei einem einfachen JOIN habe, ist das wohl eine Nummer zu hoch, oder?

Du wirst ja in meinem Code gesehen haben, dass ich mehrere Abfragen verwenden, weil ich JOINS nicht kapiere.

LG

Kay

Hallo, was verstehst du denn an Joins nicht? Die sind doch relativ einfach in einer normalen DB Abfrage. Du machst damit nichts anderes als Fremdschlüssel darzustellen. Da Mysql aber Fremdschlüssel nicht bietet musst du das selber ausprogrammieren mit Joins.

Einfaches Beispiel mal für dich zum reinen Verständnis.

Du hast eine Tabelle User, in der stehen nun username, password, email. Und eine Tabelle Userdata, da steht drin Firstname, Lastname, Adress, Plz. So hast du erst mal Daten voneinander getrennt die im Prinzip in der Anwendung nichts miteinander zu tun haben, da steigst schon mal in die Normalisierung ein. Du kannst da auch eine Schaltertabelle noch dazwischen machen um die Beziehung beider Tabellen abzubilden, in dem Fall reicht es aber das in 2 Tabellen miteinander abzubilden.

So nun gehts an die Tabellen

Tabelle User


Id_User int(10) auto_increment,

Username varchar(100) not null,

Email varchar(100) not null,

primary key(Id_User),

FULLTEXT(Username)

Tabelle User_Data

User_Id int(10) not null default '0',

First_Name varchar(100) not null,

Last_Name varchar(100) not null,

Adress varchar(100) not null,

Plz varchar(5) not null,

primary key(User_Id),

FULLTEXT(First_Name),

FULLTEXT(Last_Name),

FULLTEXT(Adress),

FULLTEXT(Plz)

So die Felder Id_User aus der Tabelle User und User_Id aus der Tabelle User_Data bilden nun deine Beziehung ab. Die Index Vergaben sind dazu da, wenn du mal eine Suche programmieren willst. Aber das ist dann ein anderes Thema und führt zu weit.

Nun willst du alle Daten beider Tabellen ausgeben lassen, dazu musst du nun einen Join verwenden, ich verwende gern Left Join.

Die Abfrage der Tabellen mit PHP Code.


<?php
/*
*
* Abfrage der beiden Tabellen
*
*/
$sqlbefehl ="
Select
u.Id_User,
u.Username,
u.Email,
ud.User_Id,
ud.First_Name,
ud.Last_Name,
ud.Adress,
ud.Plz
From
User u
Left Join
User_Data ud
ON
(u.Id_User = ud.User_Id)
Where
Id_User =".intval($_GET['Id_User'])."
";
$ergebnis = mysql_query($sqlbefehl);

if(!$ergebnis){

echo '<pre>';
die(mysql_error().$sqlbefehl);
echo '</pre>';
}
else{

$row = mysql_fetch_assoc($ergebnis);

echo 'Username: '.$row['Username'].'<br />';
echo 'First_Name: '.$row['First_Name'].'<br />';
}
?>
[/PHP]

In dieser Abfrage wendest du einen Left Join an. Das u. und ud. bilden die Aliases. Und im ON Attribut steht die Beziehung drin anchdem die Tabellen abgefragte werden sollen. Hättest noch eine dritte tabelle in der die Beziehung zwischen beiden Tabellen abgebildet wird dann müsstest du mit 2 Joins arbeiten.

Ich hoffe du hast das Prinzip was dahinter steht verstanden.

Mfg lit-web

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...