Archiv verlassen und diese Seite im Standarddesign anzeigen : else Regel soll zwei Werte aus einer Tabelle kontrollieren, und einen anderen abfragen
Als Basis dafür nehme ich folgenden Code (http://de3.php.net/manual/de/control-structures.else.php) :
<?php
if ( $sectionid == 0) {
Bereits vorhandener Code - der Übersicht halber weggelassen
} else {
Code welcher zwei Felder Kontollieren, und den Wert eines dritten Feldes ausgeben soll
}
?>
If tritt nur ein, wenn es sich um einen Bericht handelt, es tritt nicht ein, wenn es eine Inhaltsangabe ist. Ist das die Regel erfüllt, wird eine Datenbankabfrage gemacht, und ein Ergebnis angezeigt. Dabei handelt es sich z.B. um das Datum. Wird die Regel nicht erfüllt, fehlt die Datumsangabe. Dort soll dann das Datum aus aktuellste Bericht der in diesem Inhaltsverzeichnis angezeigt werden.
Was hinter else kommt ist das Problemkind.
Die Contenttabelle in MySQL führt alle Berichte auf, sowohl die News von 2005 und 2006. Das Inhaltsverzeichnis ist als Category News 2006 als Section News.
Die Abfrage müsste so sein, dass sie nur in dem Inhaltsverzeichnis mit übereinstimmenden Section/Categorien sucht. Das wären dann die id's aus der Spalte sectionid und catid. In beiden Fällen wäre es 1. Der Code soll aber heraussuchen, um welche Section und Categorry es sich handelt, dann bleiben nur noch die Berichte aus der Tabelle übrig, die im Inhaltsverzeichnis angezeigt werden. Jetzt gilt es nur noch das aktuellste Datum herauszufinden, und dann anzuzeigen.
Wie sieht der Code, bzw die Codeteile aus?
Benny-one 06-02-2006, 12:30 man könnte dir besser helfen, wenn du deine DB-Struktur mal posten würdest.
Die gesammte Datenbank könnte sehr umfangreich sein, ich stelle mal die Bereiche da, welche wichtig sein könnten:
Joomla > Tabelle > jos_categories
Joomla > Tabelle > jos_content
Joomla > Tabelle > jos_section
jos_jos_content: (Hier nur die Überschriften der Spalten)
id
title
title_alias
introtext
fulltext
state
sectionid
mask
catid
created
created_by
created_by_alias
modified
modified_by
checked_out
checked_out_time
publish_up
publish_down
images
urls
attribs
version
parentid
ordering
metakey
metadesc
access
hits
Die anderen Tabellen müßte ich dann einzelnd als Anhang beifügen
Hier die Struktur von jos_content: http://www.noreasontodie-music.com/linux/db-struxtur-content.jpg
Hier die Struktur von jos_categories:
http://www.noreasontodie-music.com/linux/jos_categories.png
Hier die Struktur von jos_section:
http://www.noreasontodie-music.com/linux/jos_section.png
Ein halbes MB an Bildern direkt eingebunden - aber sonst geht's dir noch gut?
wahsaga
Das liegt doch auf meinem Server.
Zitat von Benny-one : "man könnte dir besser helfen, wenn du deine DB-Struktur mal posten würdest."
Und ich wollte den Leuten einfach das klicken auf den Link sparen. Kleiner hätte man das nicht darstellen können, sonst wäre es unleserlich geworden.
Trotzdem müssen die Bilder jedes mal erst geladen werden.
Ich z.B. hab nicht eins deiner Bilder angesehen. ;)
btt:
Wie übergibst du denn die Werte? Wo speicherst du, welche Kategorie oder Sektion oder was auch immer ausgelesen werden soll?
Per URL? Per Post-Formular? Per Abfrage aus der DB?
Wieso machst du nicht einfach an der Stelle, wo du dein Ergebniss haben willst, eine Abfrage mit einer where-Klausel "where id = $section_id"?
Sortieren kannst du das ganze mit "ORDER BY" am Ende deines Query's.
Original geschrieben von sagg
Trotzdem müssen die Bilder jedes mal erst geladen werden.
Ich z.B. hab nicht eins deiner Bilder angesehen. ;)
Fand ich auch ein bisschen verwunderlich, denn das entsprechend anzupassen, das dürfte nicht das Problem sein. (z.B. "sagg" gegen "Yehudi" auf der DB austauschen)
Original geschrieben von sagg
btt:
Wie übergibst du denn die Werte? Wo speicherst du, welche Kategorie oder Sektion oder was auch immer ausgelesen werden soll?
Per URL? Per Post-Formular? Per Abfrage aus der DB?
Die Daten werden aus der DB geholt. sectionid wäre ein Wert, und daraus der Wert von catid.
Original geschrieben von sagg
Wieso machst du nicht einfach an der Stelle, wo du dein Ergebnis haben willst, eine Abfrage mit einer where-Klausel "where id = $section_id"?
Sortieren kannst du das ganze mit "ORDER BY" am Ende deines Query's.
Wenn ich
$query = "SELECT introtext FROM `jos_content` WHERE id='$sectionid";
mache, dann habe ich zwar ein Ergebnis auf den Seiten also Inhaltsverzeichnissen, auf denen ich es haben will, aber nicht das Richtige.
Wenn ich
$query = "SELECT introtext FROM `jos_content` WHERE sectionid='$sectionid";
mache erhalte ich auf allen Seiten eine Anzeige - durch die else Funktion bekomme ich das für die Seiten wo es nicht sein soll weg - aber ich habe in der Anzeige mehrere Ergebnisse aus der Nachbarkategorie. Der Unterschied der bei Kathegorien besteht in der "catid". Wenn also aus der Category, aus welcher das Inhaltsverzeichnis angezeigt wird, den Wert X hat, so müßte es doch möglich sein nur diesen Wert anzuzeigen. Wenn ich
$query = "SELECT introtext FROM `jos_content` WHERE sectionid='$sectionid ORDER BY catid "; angebe, erhalte ich aus die Ergebnisse, wie vorher auch, nur das mit der kleinsten catid das Ergebnis oben steht.
Ich will aber nur die Ergebnisse mit der catid, die sich auf das Inhaltsverzeichnis beziehen.
select bla from tabelle where catid=$deine_catid?
Ich verstehe nicht wirklich was daran so schwierig ist.
Es gibt keinen festen Wert. Ich müßte also in der Zeile $query = "SELECT introtext FROM `jos_content` WHERE sectionid='$sectionid' ORDER BY catid ";
statt "ORDER BY catid" was anderes einsetzen, die also nur die entsprechende catid anzeigt. Das ganze geht nur mit Variablen. Wenn ich catid statt sectionid einsetze, dann erhalte ich ein ganz anderes Ergebnis, irgend so'n Copyright von Joomla.
Derzeit sieht der Code so aus:
/* Verbindung aufbauen, auswählen einer Datenbank */
$link = mysql_connect("192.168.3.1", "root", "")
or die("Keine Verbindung möglich: " . mysql_error());
echo "Verbindung zum Datenbankserver erfolgreich";
mysql_select_db("joomla") or die("Auswahl der Datenbank fehlgeschlagen");
/* ausführen einer SQL Anfrage */
$query = "SELECT introtext FROM `jos_content` WHERE sectionid='$sectionid'";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
/* Ausgabe der Ergebnisse in HTML */
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td><div class=\"grauzone\">$col_value</div></td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
/* Freigeben des Resultsets */
mysql_free_result($result);
/* schliessen der Verbinung */
mysql_close($link);
catid hat Zahlen von 1-15 derzeit. Das heißt im derzeitigen Ergebnis werden mehre Ergebnisse aus 1-15 angezeigt. Anhand die catid ist klar welche Kategorie gemeint ist. Ist das Ergebnis bsp.1, dann sollen nur von dem obigen Code die Ergebnisse mit der 1 in catid angezeigt werden, ist es 15, dann nur 15, etc.
Kann mir jemand beim Erstellen und einfügen des Codes helfen?
Entweder bin ich begriffsstutzig oder Du beschreibst dein Problem nicht richtig. Du redest was von catid - ich seh in Deinem Source aber keine catid.
Beschreib doch mal ganz langsam und ausführlich was Du erreichen willst.
Catid ist dort nicht enthalten, weil ich es nicht eingebaut bekomme. Das derzeitige Ergebnis könnte durch catid selektiert werden.
Das Inhaltsverzeichnis besteht aus deckt sich mit der catid.
Alle Berichte mit 1 sind in dem Inhaltsverzeichnis News 2001, und 2 News 2002 etc. - Wobei die Jahreszahlen unabhängig davon sind. 6 könnte z.B. Witze 2005 haben. Die catid vom Inhaltsverzeichnis muss sich mit der von den introtexten decken, alle anderen introtexte müssen ausgeblendet werden.
geh doch mal mit PHPmyAdmin in Deine Datenbank und schau Dir an welchen SQL-Befehl Du brauchst um die korrekten Datensätze auszuwählen.
Falls dieser Befehl immer unterschiedlich sein sollte weil es ja verschiedene Inhaltsverzeichnisse gibt, dann nimmst erst mal einen (z.B. Witze 2005) und gibst den Inhalt dieser Anfrage mit php korrekt formatiert aus.
Anschließend schaust was an der sql-Anfrage geändert werden muß, damit die anderen Ergebnisse geliefert werden.
Edit:
hab mir Dein Beispiel noch mal angeschaut:
Wenn Du mit dem obigen Source die Ergebnisse der Kategorie 1 korrekt angezeigt bekommst, dann mußt Du ja nur vor der Datenbankanfrage die Variable sectionid ändern. Wo kommt die Variable denn her? Aus nem Formular per POST oder GET oder woher?
Also php Admin sagt:
SELECT *FROM `jos_content` ORDER BY `catid` ASC
Dann bekomme ich das aber sortiert.
Wenn ich sectionid='$sectionid' ändere, bekomme ich sofort was raus, was damit gar nichts zu tun hat.
Die section ist sozusagen das erste, was abgefragt wird, setze ich Order dahinter erhalte ich eine Sotierung. Statt dessen müßte ein Befehl dort jetzt die übereinstimmende catid raussuchen, und damit das Ergebnis selektieren.
Ich hatte schon versucht, $catid = $_GET ('catid') davorzusetzen. Das funktioniert auch nicht. Mit id in der Klammer auch.
Es gäber noch die Möglichkeit:
SELECT *FROM `jos_categories` ORDER BY `id` ASC
dann befinde ich mich aber außerhalb von jos_content
Man kann ja auch kein where 2 mal machen.
in Deiner Tabelle jos_content sind ja sowohl die Spalte catid als auch sectionid vorhanden.
Die müßtest sie auswählen mit
SELECT * FROM 'jos_content' WHERE catid=1 AND sectionid=1
wenn das ganze variabel sein soll, dann müßte da dann stehn:
SELECT * FROM 'jos_content' WHERE catid=$catid AND sectionid=$sectionid
allerdings weiß ich jetzt nicht ob die Syntax stimmt....
das hatte ich schon, sobald ich da mit AND komme gibt es 'ne Fehlermeldung. Allerdings weiß ich auch nicht so genau, nach was ich noch googlen könnte. Im Joomlaforum ist auf solche Fragen kaum was zu finden, ich glaube da begnügt man sich zum Teil mit dem vorgegebenen, und schraubt liebend gerne an seinem template rum. - Was ja völlig ok ist. -
Demnach brauch ich nicht aus der Tabelle jos_content raus. Das schränkt ja schon mal die Try and Errors ein. *schwitz*
Was ich zu section und catid noch herrausgefunden habe ist, dass sie bei php-Seiten auch mit anderen CMS'en zu finden sind, die sich oben in der URL befinden, soweit nicht ein URL Design durchgefühhrt wurde.
Das URL Design kommt ja nach der DB-Abfrage, und kann dann doch hoffentlich nicht diese Abfrage beeinflußen? :rolleyes:
Ich Danke Dir für Deine Mühe, dass hilft mir schon ein bißchen weiter.
Ich habs.:D :huep: :rocks: :
$query = "SELECT introtext FROM `jos_content` WHERE sectionid='$sectionid' AND catid = '$id'";
Dann funktioniert es. *schwitz*
Danke
|
|