PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ausgabe reduzieren


pennywise81
02.07.2003, 13:18:32
wie kann ich das denn jetzt machen, daß die sql ausgabe nur 5 bilder pro tabellenreihe anzeigt?

c4
02.07.2003, 13:22:27
SELECT * FROM sna WHERE hui='nein' LIMIT 0,5

Das gibt Dir die ersten 5 Datensätze aus.

LIMIT 10, 20 würde Dir 20 DS ausgeben, beginnend bei DS 10

pennywise81
02.07.2003, 13:25:06
kann ich das nicht inner Schleife machen? Will ja alle ´Datensätze ausgeben. Wenn ich zum Beispiel 50 Bilder hab muß ich jja dann 10mal selecten. Nich falsch verstehen ;-)

c4
02.07.2003, 13:30:03
Ups, gnadenlos überlesen. :)

Dafür brauchst Du 2 Schleifen. Die äußere sorgt für die Zeilen und die innere für die Spalten.

Das folgende Etwas gibt Dir (hoffentlich) das kleine 1x1 aus - so als Beispiel.for ($i=1; $i<=10; $i++) {
for ($j=1; $j<11; $j++)
echo ($i*$j).' ';
echo '<br>';
} Das einfach anpassen und schon hast Du's.

Ben20
02.07.2003, 13:30:04
Du musst nur zählen in welcher Tabellenzelle Du dich gerade befindest, wenn Du in der 5 bist, gibst Du einfach </tr><tr> aus, schon hast Du ne neu Zeile - da fängst Du wieder von vorne an zu zählen, usw usw.

Nachdem alle Bilder ausgegeben wurden musst Du noch soviele Leerzellen zur letzen Zeile hinzufügen wie eben noch fehlen.

Z.b. immer 5 Bilder pro Zeile, in der letzen Zeile waren nur 2 Bilder also noch 3 Zellen ausgeben!



Diesmal war ich zu langsam ;-)

pennywise81
02.07.2003, 13:35:45
köönt ihr nich mal so'n stüch code posten, das ich das auch versteh? bin da nich so gut drin. also soweit bin ich schonmal, aber da wird nach jedem link ein zeilenumbruch gemacht:
$result = mysql_query("SELECT id, datei, tn FROM fotos WHERE gallerie = '".$_GET['gallery']."' ");
while($row = mysql_fetch_array($result)) {
echo "<a href="fotos.php?action=view&pic=";
echo $row["id"];
echo ""><img src="/pennywise1981/fotos/";
echo $_GET["gallery"];
echo "/";
echo $row["tn"];
echo ""></a><br>";
}

c4
02.07.2003, 13:41:23
Dann halt so:
$i=0;
$result = mysql_query("SELECT id, datei, tn FROM fotos WHERE gallerie = '".$_GET['gallery']."' ");
while($row = mysql_fetch_array($result)) {
echo "<a href="fotos.php?action=view&pic=";
echo $row["id"];
echo ""><img src="/pennywise1981/fotos/";
echo $_GET["gallery"];
echo "/";
echo $row["tn"];
echo ""></a>";
$i++;
if ($i==5) { echo '<br>'; $i=0; }
}

Ben20
02.07.2003, 13:41:57
So könnte es gehen!


$result = mysql_query("SELECT id, datei, tn FROM fotos WHERE gallerie = '".$_GET['gallery']."' ");

$i = 0;

while($row = mysql_fetch_array($result)) {
echo "<a href="fotos.php?action=view&pic=";
echo $row["id"];
echo ""><img src="/pennywise1981/fotos/";
echo $_GET["gallery"];
echo "/";
echo $row["tn"];
echo ""></a>";

if($i == 5) {
echo "<br>";
$i = 0;
}

$i++;

}

MiH
02.07.2003, 13:46:15
http://www.selfphp.info/forum/forum/showthread.php?s=&threadid=4209

pennywise81
02.07.2003, 13:47:18
jau geht. danke.

pennywise81
02.07.2003, 14:11:38
jetzt hab ich aber noch ne frage. hab jetzt sowas als gallerie-auswahl:
$result = mysql_query("SELECT DISTINCT gallerie FROM fotos");
$i = 0;
echo "<center><table width="300" border="0"><tr>";
while($row = mysql_fetch_array($result)) {
echo "<td align="center"><a href="fotos.php?action=show&gallery=";
echo $row["gallerie"];
echo "">";
echo $row["gallerie"];
echo "</a></td>";
$i++;
if ($i==5) { echo '</tr><tr>'; $i=0; }

}
echo "</tr></table></center>";


Nu hab ich als links aber nur text. möchte aber das zu den links jeweils noch ein bild angezeigt wird. mit distinct kann ich das dann aber nicht mehr machen, oder?

MiH
02.07.2003, 16:45:13
SELECT fotos.foto,galerie.name FROM fotos inner join galerie on galerie.gid = fotos.gid group by galerie.gid order by rand() limit 1

pennywise81
02.07.2003, 16:48:30
um gottes willen! was ist das denn?
kannst du das auch erklären? bitte?

MiH
02.07.2003, 16:59:37
naja ich weiß ja nicht wie deine db aufgebaut ist.
ich bin von dieser struktur ausgegangen:
tabelle galerie:

gid | name


und die tabelle fotos:

imgid|gid|foto


so nun fragst du ganz einfach ab

SELECT fotos.foto,galerie.name FROM fotos
inner join galerie on galerie.gid = fotos.gid <- gibt nur datenzurück wo in beiden tabellen die gid (galerieid) überein stimmt
group by galerie.gid (zeigt jeden galerienamen nur 1 mal an)
order by rand() limit 1 und ermittelt die 1 zufälliges bild daraus.

pennywise81
02.07.2003, 23:42:15
nee, hab nur ein table 'fotos', das sieht so aus:

id(auto_increment)|datei(das ist das Bild)|gallerie(das ist der name des ordners, wo das bild abgelegt ist|tn(thumbnail-datei|text(irgendein text zu dem bild

jetzt such ich mir für die gallery-übersicht die verschiedenen gallerien raus, indem ich schreibe:

SELECT DISTINCT gallerie FROM filme


und geb die dann als link aus, der dann halt zu der gallerie führt,
also ungefähr so:


echo "<a href="view.php?gallery=".$row["gallerie"]."">".$row["gallerie"]."</a>";


ich hätt aber jetzt zusätzlich zu dem textlink noch ein thumbnail aus der jeweiligen gallery, egal welches, das erste bild oder so. nur weiß ich nicht wie. ich kann dann doch ind der abfrage nicht mehr mit distinct arbeiten, weil dann kann ich ja nur eine spalte abfragen, oder?

HHÜÜÜLLFEEEEEEE!!

MiH
03.07.2003, 08:36:43
select tn, galerie from fotos group by galerie order by rand() limit 1;

pennywise81
03.07.2003, 12:18:25
funktioniert leider auch nicht. krieg dann nur ein bild als ausgabe. ich hab aber 3 gallerien (schaltplaene, auto, austin powers party)
mit jeweils einem bild. ausser auto, die hat zwei bilder. hier ist mal der link:
gallery (http://mitglied.lycos.de/pennywise1981/fotos.php)
und hier mein code wie er bis jetzt ist:
$result = mysql_query("SELECT DISTINCT gallerie FROM fotos");
$i = 0;
echo "<center><table width="300" border="0"><tr>";
while($row = mysql_fetch_array($result)) {
echo "<td align="center"><a href="fotos.php?action=show&gallery=";
echo $row["gallerie"];
echo "">";
echo $row["gallerie"];
echo "</a></td>";
$i++;
if ($i==5) { echo '</tr><tr>'; $i=0; }

}
echo "</tr></table></center>";

pennywise81
04.07.2003, 12:26:00
hat denn keiner mehr nen tip für mich? büdde büdde...

Ben20
04.07.2003, 12:36:57
Diesen

SELECT foto FROM fotos WHERE gallery = '" . $row["gallerie"] . "' ORDER BY foto DESC LIMIT 1

Query, noch in die Schleife einbauen und das Ergebnis anzeigen lassen. Evtl. musst Du noch die Namen der Felder anpassen!

BTW: Es ist nicht gut, jedem Bild den Wert von Gallery zuzuweisen, ein Tippfehler und Du hast ne neue Galerie. Leg die Namen der Galerien in eine eigene Tabelle und schreib in die alte Tab nur noch die IDs der neuen Tabelle!

pennywise81
04.07.2003, 12:50:42
ich hab ein upload script geschrieben, wo ich die bereits vorhandenen gallerien auswählen kann. von daher kann mir das mit dem tippfehler nicht passieren. wenn ich dich jetzt richtig verstanden hab, dann muss ich deinen query als zwiten in die schleife schreiben, also das ich zwei querys hab?
und was heisst eigentlich btw??

Ben20
04.07.2003, 13:08:21
wenn ich dich jetzt richtig verstanden hab, dann muss ich deinen query als zwiten in die schleife schreiben, also das ich zwei querys hab?

Rchtig!

BTW == By the Way

Trotzdem ist das Datenbankmodell optimierbar, da im Moment noch überflüssige Informationen mitführst. Hast Du Dich schonmal mit den Normalisierungsregeln für Datenbank auseiander gesetzt? Wenn nicht, kann ich das Buch mySQL von Michael Koffler (www.koffler.cc) empfehlen.

pennywise81
04.07.2003, 13:13:07
na holla die waldfee...
ich wollte eigentlich das gallerie-script für mich als übung schreiben, und weil meine kollegen mich nerven ich solle doch endlich mal die fotos von der party online stellen. kannst du mir nicht mal so'n stückgen code tippen,wie ich das jetzt einbaue?
hatte den zweiten query in die erste schleife eingebaut und die beiden abfragen dann in eine zweite schleife eingebaut, aber irgendwie funzt das nicht. krieg keine ausgabe. ich weiß ich nerve. bin auch anscheinend zu doof. vielleicht sollt ich's einfach lassen :-(

Ben20
04.07.2003, 13:23:59
Am ursprünglichen Script, dass schon lief, nix verändern. Einfach innerhalb von

while(...) {

}

nochmal mysql_query(Neuer Query) und mysql_result einbauen schon läufst. Im Ganzen Script darfs Du nur insgesamt zwei Querys haben. Einen innerhalb und einen außerhalb der Schleife!

pennywise81
04.07.2003, 13:47:13
hab noch nie mit mysql_result gearbeitet. wsie ist'n da die syntax?

Ben20
04.07.2003, 13:50:11
Also bei aller Hilfsbereitschaft, durch die Funktionsrefrenz von selfphp kannst Du dich ja wohl auch selbst durchklicken!

pennywise81
04.07.2003, 13:54:41
sorry mein fehler. war grqad auf reeg.net und da stand nix von mysql_result. ich probier's mal...

pennywise81
04.07.2003, 14:04:26
was ist denn jetztv daran falsch? seh immer noch kein bild...
while($row = mysql_fetch_array($result)) {
$result2 = mysql_query("SELECT datei FROM fotos WHERE gallery = '" . $row["gallerie"] . "' ORDER BY foto DESC LIMIT 1");
$bild = mysql_result($result2, "fotos.datei");
echo "<td align="center"><a href="fotos.php?action=show&gallery=";
echo $row["gallerie"];
echo "">";
echo $row["gallerie"]."<br>".$bild;
echo "</a></td>";
$i++;
if ($i==5) { echo '</tr><tr>'; $i=0; }

}

Ben20
04.07.2003, 14:23:55
1)

nicht so:
$bild = mysql_result($result2, "fotos.datei");

sondern so:
$bild = mysql_result($result2, 0, 0);


2)

Wenn Du es so machst:
echo $row["gallerie"]."<br>".$bild;

wird PHP dir Gadenlos den Eintrag der DB in den Quelltext hauen. Der Browser kann damit aber überhauptrein garnichts anfangen, bzw. er hälst für einen Text. Lange Rede kurzer Sinn: Du musst Bild als Wert von src des img Tags ausgeben lassen

echo $row["gallerie"]."<br> <img src="pfad_zu_den_bildern/".$bild."">";

pennywise81
04.07.2003, 14:38:07
jetzt hab ich lauter weiße vierecke mit roten x-en drin :-)
irgendwie hab ich irgendwo ne ganz dicke verwurstung drin...

$result = mysql_query("SELECT DISTINCT gallerie FROM fotos");
$i = 0;
echo "<center><table width="300" border="0"><tr>";
while($row = mysql_fetch_array($result)) {
$result2 = mysql_query("SELECT datei FROM fotos WHERE gallery = '" . $row["gallerie"] . "' ORDER BY foto DESC LIMIT 1");
$bild = mysql_result($result2, 0, 0);
echo "<td align="center"><a href="fotos.php?action=show&gallery=";
echo $row["gallerie"];
echo "">";
echo $row["gallerie"]."<br><img src="fotos/".$row["gallery"]."/".$bild."">";
echo "</a></td>";
$i++;
if ($i==5) { echo '</tr><tr>'; $i=0; }

}

Ben20
04.07.2003, 14:44:20
Mit anderen Worten er findet das Bild nicht. Stimmt der Pfad zum Bild, stimmt der Dateiname (sprich selektiert er einen Dateiname aus der DB?) Schau Dir am besten mal den von PHP generierten Quelltext an!

pennywise81
04.07.2003, 14:49:26
weder der pfad noch die datei ist richtig. unter der eigenschaft des roten x-es steht als url
http://mitglied.lycos.de/pennywise1981/fotos//
scheint ja dann wohl keine daten aus'm table zu kriegen. nur, warum?

Ben20
04.07.2003, 15:02:17
Überprüf mal den Query, ob die Feldnamen stimmen, und ändere den Pfad halt so dass er auf die Ordnerstruktur deiner Seite passt!

pennywise81
04.07.2003, 15:10:00
hab alles überprüft. is richtig. geht das denn nich auch irgendwie anders? also nich mit distinct und nem zweiten query, sondern nur alles in einem query?

Ben20
04.07.2003, 15:14:36
mach mal echo mysql_error() nach dem zweiten Query!

Hast Du es eigentlich mal mit DISTINCT ausprobiert, evtl geht das auch, bin ich mir jetzt nicht sicher.

Ansonsten würde es mit 1 Query gehen, wenn Du Galerie und Fotos in zwei Tabellen hättest! Mit JOIN müsste es irgendwie gehen, da bin ich mir jetzt aber nicht sicher wie!

pennywise81
04.07.2003, 15:39:10
jetzt geht's. ich weiß auch worans gelegen hat. bitte nichtschlagen...
vorher:
$result2 = mysql_query("SELECT datei FROM fotos WHERE gallery = '" . $row["gallery"] . "' ORDER BY datei DESC LIMIT 1");
nachher:
$result2 = mysql_query("SELECT datei FROM fotos WHERE gallerie = '" . $row["gallerie"] . "' ORDER BY datei DESC LIMIT 1");
siehst du's? tschuldigung...

Ben20
04.07.2003, 15:48:53
Ich seh's! Na Hauptsache es geht jetzt!

MiH
07.07.2003, 08:23:04
warum machst du 2 abfragen? das kannst du doch auc mit einer erschlagen und er liefert dir dann ein ergebnis.
alles was du willst ist doch nur den namen der galerie + 1 bild.
und das genau liefert dir:

select galeriename,foto from fotos group by galerie order by galerie asc;

bereist bei diesem kleinen script merkst du das dein aufbau der db totaler schrott ist :)