Blättern...
Andreas
- php
Hi,
habe eine Tabelle aus der ich Produktlinie dann die Gruppen und zum Schluß
die Artikel aus der DB auslese.
Aufbau für die Darstellung pro Seite:
LIMIT $start,$limit
if($start == "") { $start = 0;}
if($gstart == ""){ $gstart = 0;}
$limit = 3;
Produktlinie_1
Gruppe_1
Artikel_1
Artikel_2
Artikel_3
Wechsel der Gruppe:
Produktlinie_1
Gruppe_2
Artikel_4
Artikel_5
Artikel_6
neue Seite
Produktlinie_1
Gruppe_2
Artikel_7
Artikel_8
Wechsel der Produktlinie:
Produktlinie_2
Gruppe_3
Artikel_9
Artikel_10
Artikel_11
Ansatz:
// $patotal_summe = Anzahl der Artikel pro Gruppe
// $total = Gesamtzahl aller Artikel
echo "| $patotal_summe von $total Artikel | ";
if($patotal_summe <= 3)
{
$next = $start + 0;
$gnext = $gstart + 1;
echo"<a href=".PHP_SELF."?mw=$mw&start=".$next."&gstart=".$gnext.">vor
></a> |";
}
wie schaffe ich es das er mir zwischen den Artikel und Gruppen blättert
wie muß ich am besten abfragen
ich habe die Gesamtzahl der Artikel
und habe die Gesamtzahl der Artikel der Gruppen
Danke für jede Hilfe
die Blätterfunktion wie unter
http://www.php-center.de/artikel/blaettern.php3
hilft mir nicht weiter, da ich noch eine Untergruppierung habe
Andreas
Hallo Andreas,
Ja, ja das Blättern ...
Verwendest du eventuell PEAR-Packages?
Wenn nicht, wäre gerade so eine Problematik es wert, einen Blick
in diesen Fundus zu werfen. Ich poste dir ein Beispiel, das aber mit deiner Anwendung noch nichts gemein hat. Ein bisschen Gehirnschmalz solltest du selber auch beisteuern. Man muss zwar ein bisschen Überlegungsarbeit leisten, um solche Packages zu verstehen, dann aber sind sie meist eine große Hilfe, und man kann sie für den Eigenbedarf gut zurecht schneidern.
Voilà:
// Beispiel mit einem einfachen PEAR Pager
include ("../etc/config.php");
require_once 'Pager.php';
db_get($db, DB_NAME, DB_LOGIN, DB_PASSWD, DB_HOST, DB_SYSTEM);
$from = isset($_REQUEST['from']) ? $_REQUEST['from'] : 0; // The row to start to fetch from (you might want to get this
// param from the $_GET array
$limit = 20; // The number of results per page
$maxpages = 10; // The number of pages for displaying in the pager (optional)
$sql = "SELECT * FROM formen";
$res = $db->limitQuery($sql, $from, $limit);
if (DB::isError($res))
die ("Hopfen und Malz verloren");
$n = 0;
while($line = $res->fetchRow())
{
print "<a href="xxx.php?par='".$line["parameter"]."'">".$line["parameter"]."</a> : ".$line["parameter"]."<br>";
$n++;
}
$data = DB_Pager::getData($from, $limit, $res->numRows(), $maxpages);
print "<br><br>";
//display previous link
printf('<a href="%s?from=%d">Previous</a> |', $_SERVER['PHP_SELF'],$data['prev']);
//display page links
foreach($data['pages'] as $page=> $start)
{
if ($start == $from)
printf(' %d | ', $page);
else
printf('<a href="%s?from=%d">%d</a> | ',$_SERVER['PHP_SELF'], $start, $page);
}
//display next page link
printf('<a href="%s?from=%d">Next</a>',$_SERVER['PHP_SELF'],$data['next']);
//display the records part
printf(" Displaying records %d- %d of %d)",$data['from'],$data['to'],$data['numrows']);
Ein komfortablerer Pear Pager ist jener von Richard Heyes
Blätterproblematiken lassen sich auch mit Template-Engines wie Smarty mit seinen sections gut und unaufwändig lösen.
Michael
Hi,
verwende nicht PEAR Pager hatte verschiedene andere die mir aber nicht für diesen Zweck nicht weitergeholfen hatten. Mir fehlt der Ansatz für mein Problem
Nochmal aufgelistet unter http://forum.de.selfhtml.org/?t=91168&m=548188
Gruss
Andreas
verwende nicht PEAR Pager hatte verschiedene andere die mir aber nicht für diesen Zweck nicht weitergeholfen hatten. Mir fehlt der Ansatz für mein Problem
Na gut, machen wir das Ganze zu Fuß ohne zu Hilfenahme eines Pagers, wobei ich unterstreichen möchte, dass es mit einem der genannten Pager leicht machbar wäre.
Du startest also mit einer bestimmten Linie, mit einer bestimmten Gruppe und ev. mit einem bestimmten Artikel.
<?PHP
$linie = $_GET['von_linie'];
$gruppe = $_GET['von_gruppe'];
$sql = "SELECT l.linie, g.gruppe, a.artikel, a.artikelbeschreibung FROM artikeltabelle a,
LEFT JOIN gruppe g ON g.gruppe = a.gruppe
LEFT JOIN linie l ON l.linie = g.linie
WHERE l.linie = ".$_GET['von_linie']." AND
g.gruppe = ".$_GET['von_gruppe']." AND
a.artikel > ".$_GET['von_artikel']."
ORDER BY l.linie, g.gruppe, a.artikel
limit 3";
$result = $mysql_query($sql, $from, $limit);
if (mysql_num_rows($result) < 1) die ({Operation bei 0 Records});
$n = 0;
while($line = $mysql_fetch_array($result))
{
if ($line['linie'] != $linie)
{
{Operationen für Liniengruppenwechsel}
$linie = $line['linie'];
$gruppe = $line['gruppe'];
}
if ($line['gruppe'] != $gruppe)
{
{Operationen für Artikelgruppenwechsel}
$gruppe = $line['gruppe'];
}
print "<a href="".$_SERVER['SELF_PHP']."?artikel='".$line["artikel"]."'">".$line["artikel"]."</a> : ".$line["artikel"]."<br>";
$von_linie = $line['linie'];
$von_gruppe = $line['gruppe'];
$von_artikel = $line['artikel'];
$n++;
}
?>
<html>
<input type="hidden" name="von_linie" value="<?PHP echo $von_linie; ?>">
Das ganze HTML-Drumherum (aber vielleicht verwendest du eine Template-Engine) lasse ich mal weg.
Hilft dir das?
Michael
Hallo,
Hilft dir das?
ich denke ja,
werde mal gleich rumbasteln.
Jetzt habe ich mal einen Ansatz
Vielen vielen Danke
:-)
Hi,
$sql = "SELECT l.linie, g.gruppe, a.artikel, a.artikelbeschreibung FROM artikeltabelle a,
LEFT JOIN gruppe g ON g.gruppe = a.gruppe
LEFT JOIN linie l ON l.linie = g.linie
WHERE l.linie = ".$_GET['von_linie']." AND
g.gruppe = ".$_GET['von_gruppe']." AND
a.artikel > ".$_GET['von_artikel']."
ORDER BY l.linie, g.gruppe, a.artikel
limit 3";
wenn ich das richtig verstanden habe bezieht sich das ganze auf mehrere Tabellen oder?
Habe aber nur eine Tabelle, da ich eine Textdatei zum auslesen erhalte.
:-(
Habe aber nur eine Tabelle, da ich eine Textdatei zum auslesen erhalte.
:-(
Ein Quentchen mehr an Phantasie, bitte! wenn du die Linien- sowie die Gruppeninformation in einer Tabelle hast, dann brauchst du diese Joins natürlich nicht zu machen. Ich hatte halt vermutet, dass die genannten Informationen - relational orthodox - in getrennten Tabellen gelagert wären. Wenn nicht, gleichst du die Abfrage an die Verhältnisse an.
Michael
Ein Quentchen mehr an Phantasie, bitte!
wenn du die Linien- sowie die Gruppeninformation in einer Tabelle hast, dann brauchst du diese Joins natürlich nicht zu machen. Ich hatte halt vermutet, dass die genannten Informationen - relational orthodox - in getrennten Tabellen gelagert wären. Wenn nicht, gleichst du die Abfrage an die Verhältnisse an.
1.
bin kein Profi,
2.
hätte ich auch gerne gemacht aber ich habe ein Verständnis Problem
$von_linie = $line['linie'];
$von_gruppe = $line['gruppe'];
$von_artikel = $line['artikel'];
enthalten dieser Variable einen Zahlenwert?
bin ich blind, woher kommt dieser?
$von_linie = $line['linie'];
$von_gruppe = $line['gruppe'];
$von_artikel = $line['artikel'];enthalten dieser Variable einen Zahlenwert?
Also, du brauchst ja die Information, zu welcher Linie und zu welcher Gruppe deine Artikel gehören; wo hast du denn diese Informationen? Normalerweise ist in einer Artikeltabelle
dann eine Linien_Id und eine Gruppen_Id, die auf eine Linien-Tabelle bzw. auf eine Gruppen-Tabelle verweisen, in der die Beschreibungen stehen.
Nach deinen Hinweisen zu urteilen, scheinen diese Informationen aber im Artikelrecord selber implementiert zu sein. Du sprachst ja von der Hierarchie:
Linie --> (Id = 1) Bezeichnung = Metall
Gruppe --> (Id = 4) Bezeichnung = Boxen
Artikel Id = 1022 Bezeichnung = Metallbox 20 x 50
Artikel Id = 1324 Bezeichnung = Metallbox 30 x 50
Artikel Id = 1400 Bezeichnung = Metallbox 40 x 50
Na, irgendwo brauchst du diese Angaben in deiner Informationsstruktur, damit du die Hierarchie wie gewollt auslesen kannst. Es müssen nicht zwingend numerische Identitäten sein.
Du willst mich, hoffentlich, nicht pflanzen? Denn das gehört eigentlich zum low-level Datenbank-Knoff-Hoff.
Michael
Hi,
Nach deinen Hinweisen zu urteilen, scheinen diese Informationen aber im Artikelrecord selber implementiert zu sein. Du sprachst ja von der Hierarchie:
wenn ich die Daten so hätte dann ja, aber die habe ich nicht so
Tabelle = artikel
idint(6) NOT NULL auto\_increment,
pl_linievarchar(15) NOT NULL default '',
pl_gruppevarchar(25) NOT NULL default '',
artikel` text NOT NULL,
...
pl_linie = AluPlus, ProfiPlus
pl_gruppe = Box, Set
artikel = Artikel1, Artikel2...
Zuerst kommt Die Produktlinie:
$sql_linie = @mysql_query("SELECT pl_linie FROM artikel
WHERE pl_linie <> ''
AND pl_gruppe <> ''
GROUP BY pl_linie
ORDER BY pl_linie");
...
dann die Produktgruppe:
$sql_group = @mysql_query("SELECT pl_gruppe FROM artikel
WHERE pl_linie = '".$zeile1["pl_linie"]."'
AND pl_gruppe <> ''
GROUP BY pl_gruppe
ORDER BY pl_gruppe
LIMIT 0,1");
...
und dann der Artikel:
$sql_artikel= @mysql_query("SELECT * FROM artikel
WHERE pl_linie = '".$zeile1["pl_linie"]."'
AND pl_gruppe = '".$zeile2["pl_gruppe"]."'
ORDER BY m_artikelbezeichnung_de,makuba_nr
LIMIT $start,3");
Darstellung auf der Seite
AluPlu (Produktlinie)
Box (Produktgruppe)
Artikel (pro seite max 3 Stück)
id
int(6) NOT NULL auto\_increment,
pl_linievarchar(15) NOT NULL default '',
pl_gruppevarchar(25) NOT NULL default '',
artikel` text NOT NULL,
...
Doch, lieber Andreas, es scheint, dass du die Informationen so in der Artikeltabelle stehen hast, wie ich es vermutet habe. Aber dein Gedankengang ist eigenartig vertrackt. Hier nochmals mein leicht angepasster ursprünglicher Lesevorschlag. Die Linien- und Gruppenfelder sowie die Artikelid (oder alternativ die Bezeichnung je nach Sortierung) musst du als Hidden-Felder über Get oder Post an die nachfolgende Session übertragen. Wieso machst du zuerst getrennte Leseversuche auf die Linien und dann auf die Gruppen. Das ist Stumpfsinn!
$linie = $_GET['von_linie'];
$gruppe = $_GET['von_gruppe'];
$sql = @mysql_query("SELECT * FROM artikel
WHERE artikel > '".$_GET['von_artikel']."'
ORDER BY pl_linie, pl_gruppe, id (oder m_artikelbezeichnung_de)
LIMIT 3");
$result = $mysql_query($sql);
if (mysql_num_rows($result) < 1) die ("no records");
$n = 0;
while($line = $mysql_fetch_array($result))
{
if ($line['pl_linie'] != $linie)
{
{Operationen für Liniengruppenwechsel}
$linie = $line['pl_linie'];
$gruppe = $line['pl_gruppe'];
}
if ($line['pl_gruppe'] != $gruppe)
{
{Operationen für Artikelgruppenwechsel}
$gruppe = $line['pl_gruppe'];
}
print "<a href="".$_SERVER['SELF_PHP']."?artikel='".$line["artikel"]."'">".$line["artikel"]."</a> : ".$line["artikel"]."<br>";
$von_artikel = $line['id'];
// oder alternativ
$von_artikel = $line['m_artikelbezeichnung_de'];
$n++;
}
Michael
Hi,
könnten wir darüber telefonieren :?
wäre mir wichtig
könnten wir darüber telefonieren :?
Habe schon ein Mail an dich abgeschickt.
Michael
Hallo!
Produktlinie_1
Gruppe_1
Artikel_1
Artikel_2
Artikel_3Wechsel der Gruppe:
Produktlinie_1
Gruppe_2
Artikel_4
Artikel_5
Artikel_6
neue Seite
Produktlinie_1
Gruppe_2
Artikel_7
Artikel_8Wechsel der Produktlinie:
Produktlinie_2
Gruppe_3
Artikel_9
Artikel_10
Artikel_11
Ich verstehe das System nicht, also was auf einer Seite angezeigt werden soll. Warum splitest Du die Produktlinie_1+Gruppe_2? Wieviele Artikel sollen auf einer Seite angezeigt werden? Aus unterschiedlichen Linien und Gruppen?
MfG, André Laugks
Hi,
Ich verstehe das System nicht, also was auf einer Seite angezeigt werden soll. Warum splitest Du die Produktlinie_1+Gruppe_2? Wieviele Artikel sollen auf einer Seite angezeigt werden? Aus unterschiedlichen Linien und Gruppen?
ich versuche es mal so.
Aufbau der Seite
Headline_1 = Produktline
Headline_2 = Gruppe //verknüpft mit Hadline_1
Artikeln = //verknüpft mit Hadline_1 und Hadline_2
Auf der Seite werden max. 3 Artikel angezeigt
z.B.
Produktlinie = ALUPLUS, DINOPLUS
Gruppe zu ALUPLUS = BOX, ProfiBox , METALL
Artikel zu ALUPLUS aufgeteilt in den Gruppen BOX, ProfiBox , METALL
ALUPLUS / BOX
Artikel_aluplus_box_1
Artikel_aluplus_box_2
jetzt kommt ein Seitenwechsel und einem Gruppenwechsel
ALUPLUS / ProfiBox
Artikel_aluplus_profibox_1
Artikel_aluplus_profibox_2
Artikel_aluplus_profibox_3
jetzt kommt nur ein Seitenwechsel bei gleicher Gruppe
Artikel_aluplus_profibox_4
dann wieder einen Seitenwechsel und einen Gruppenwechsel
ALUPLUS / METALL
Artikel_aluplus_metal_1
Artikel_aluplus_metal_2
jetzt kommt ein Seitenwechsel mit einem Produktlinienwechsel und einem Gruppenwechsel
DINOPLUS
...
ich hoffe das versteht man jetzt :-)
Danke