php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2004

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.06.2004, 14:33  
Gast
 
Beiträge: n/a
Standard [Erledigt] Blättern mit 2 MySQL Querys...

Moin,

also, zu dem arbeitsgrund:
Ich lese Daten aus einer MySQL Datenbank aus. Dazu benötige ich 2 Querys, daher ich erst alles auslese, was nicht älter als 7 Tage ist und dann das, was älter als 7 Tage ist. Ich brauche dafür 2 Querys, daher ich es innerhalb immer nach der Spalte klick ordnen möchte und das neue nach dem Timestamp! Hier die Querys...(vielleicht kann das ja wer verienfachen)

Code:
$timeneu = time()-60*60*24*7;
$newsql = "SELECT * FROM phparchiv WHERE katnummer='$kat' AND timestamp > $timeneu ORDER BY timestamp DESC";
	$newresult = mysql_query($newsql) OR die(mysql_error());
	$newsql2 = "SELECT * FROM phparchiv WHERE katnummer='$kat' AND timestamp <= $timeneu ORDER BY klick DESC";
	$newresult2 = mysql_query($newsql2) OR die(mysql_error());
Soweit so gut....jetzt soll in das ganze eine Blätterfunktion rein! Mit einem Ergebnis kein Problem, aber mit 2 Ergebnissen wird kompliziert. Jemand eine Idee? Es sollen jeweils 10 Einträge pro Seite angezeigt werden! Aber daher das result vom 1. und 2. Query ja gleichzeitig angezeigt wird...weiß ich nicht, wie ich das anstellen soll!

wilko
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.06.2004, 14:48  
Gast
 
Beiträge: n/a
Standard

1. das ist keine Frage eines Profis
2. überarbeite Dein Konzept noch mal. Der Sinn einer "Blätterfunktion" liegt ja genau darin, ein "Ergebnisfenster" zu verschieben. Deine Einteilung in "jünger als 7 Tage" und "älter als 7 Tage" trifft so oder so auf jeden Eintrag zu.

-> moved to Anfänger Forum.
 
Alt 30.06.2004, 15:34  
Gast
 
Beiträge: n/a
Standard

naja...
wie meinst du das mit Konzept überarbeiten? Ich bin am überlegen ob dafür 2 Querys notwendig sind....aber ich weiß nicht, wie es mit einem gehen soll!

Zitat:
Zitat von meikel
Deine Einteilung in "jünger als 7 Tage" und "älter als 7 Tage" trifft so oder so auf jeden Eintrag zu.
Verstehe ich nicht! Jeder Eintrag ist entweder jünger oder älter!

wilko
 
Alt 30.06.2004, 16:17  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von wilko
wie meinst du das mit Konzept überarbeiten? Ich bin am überlegen ob dafür 2 Querys notwendig sind....aber ich weiß nicht, wie es mit einem gehen soll!
Naja, genaugenommen Du willst aus einer Menge Tupel eine "Blätterfunktion" basteln: ... LIMIT $start, $anzahl

Im Weiteren willst Du (warum auch immer) bei der Ausgabe wissen, ob der Eintrag jünger oder älter als 7 Tage ist. Das kannst Du mit PHP klären:
if ($row['datum'] < $heute_vor_7tagen) ...

Zitat:
Verstehe ich nicht! Jeder Eintrag ist entweder jünger oder älter!
Eben. Die beiden Abfragen bewirken letztendlich nur, daß das, was bei Query1 nicht erwischt wird, dann bei Query2 kommt.

Damit erschwerst Du Dir aber unnötig die "Blätterfunktion".
 
Alt 30.06.2004, 16:21  
Gast
 
Beiträge: n/a
Standard

Ich glaube wir haben ein kleines Verständnisproblem!

Wenn ich alles mit einem Query abrufen würde, könnte ich es emtweder nach dem Timestamp sortieren, oder nach dem feld klick! Ich will aber alles, was jünger als sieben Tage ist oben haben und nach timestamp sortiert! Was älter ist soll unten erscheinen und nach klick sortiert sein. Das geht soweit ich MySQL kenne nicht mit 2 Abfragen!

Wie man eine Blätterfunktion macht, wenn man einen Query hat, weiß ich. aber mit zweien wirds schwierig, ich hatte nach Ansätzen gefragt!

wilko
 
Alt 30.06.2004, 16:39  
Gast
 
Beiträge: n/a
Standard

@wilko
>Ich glaube wir haben ein kleines Verständnisproblem!

Offenbar. Allerdings bin ich unschuldig.

>Wenn ich alles mit einem Query abrufen würde, könnte ich es emtweder nach dem Timestamp sortieren, oder nach dem feld klick!

1. who the fuck is feld klick?
2. wenn Du 'blättern' willst, warum selektierst Du eigentlich nicht das, was Du brauchst? Oder willst Du zwei Blätterfunktionen: eine für das neue und eine für das alte Zeuch?

Die Frage, was wo und wie gePRINTet wird, dürfte doch absolut keine Hürde sein: einfach Ausgaben in Variablen sammeln.
 
Alt 30.06.2004, 17:00  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von meikel
Offenbar. Allerdings bin ich unschuldig.
Das tut doch nix zur Sache.

Zitat:
Zitat von meikel
1. who the fuck is feld klick?
Ein Int-Feld, mit einer Zahl!

[quote="meikel"]2. wenn Du 'blättern' willst, warum selektierst Du eigentlich nicht das, was Du brauchst? Oder willst Du zwei Blätterfunktionen: eine für das neue und eine für das alte Zeuch? [/quode
Ich gebe zur Zeit das neue und das alte untereinander aus. Das soll so bleiben, nur sollen pro Seite halt nur 10 Beiträge angezeigt werden!

In zwischen, habe ich eine Lösung für das Problem.
Ich speichere die Ergebnisse beider Abfragen in ein Array:

Code:
$timeneu = time()-60*60*24*7;
	$newsql = "SELECT * FROM phparchiv WHERE katnummer='$kat' AND timestamp > $timeneu ORDER BY timestamp DESC";
	$newresult = mysql_query($newsql) OR die(mysql_error());
	$newsql2 = "SELECT * FROM phparchiv WHERE katnummer='$kat' AND timestamp <= $timeneu ORDER BY klick DESC";
	$newresult2 = mysql_query($newsql2) OR die(mysql_error());

$i = "0";
while($array = mysql_fetch_assoc($newresult))
{
$ergarray[$i] = $array;
$i++;
}
while($array = mysql_fetch_assoc($newresult2))
{
$ergarray[$i] = $array;
$i++;
}
Schön und gut, damit kann ich jetzt z.B. so weiterarbeiten:

Code:
$zahl = count($ergarray);
$proseite = "10";
if(!$pos) $pos="0";
$anzeigen = $pos + $proseite;
//blätterstart
echo "<span style=\"font-family:Arial;font-size:10pt;\">";
if($zahl>$proseite AND $anzeigen>$proseite)
{
$zurueck = $pos - $proseite;
echo "<a href=\"http://www.ptw-server.de/index.php?seite=phparchiv2&kat=".$kat."&pos=".$zurueck."\">Zurück</a> ";
}
if($zahl>$proseite)
{
$seiten = ceil($zahl / $proseite);
for($u=1;$u<=$seiten;$u++)
{
$gehe = ($u - 1) * $proseite;
if($pos == $gehe) echo "<span style=\"font-weight: bold;\">";
echo "<a href=\"http://www.ptw-server.de/index.php?seite=phparchiv2&kat=".$kat."&pos=".$gehe."\">[".$u."]</a> ";
if($pos == $gehe) echo "</span>";
}
}
if($zahl>$proseite AND $anzeigen<$zahl)
{
echo "<a href=\"http://www.ptw-server.de/index.php?seite=phparchiv2&kat=".$kat."&pos=".$anzeigen."\">Weiter</a>";
}
echo "</span>";
//blätterende
$n = "1";
for($i=$pos;$i<$anzeigen;$i++)
{
if($ergarray[$i] != "")
{
// Ausgabe mit ergarray[$i][feld]!
}
}
Mein Problem, ich rufe immer alle Einträge aus der Kategorier ab....das ist bei max 10 anzeigen pro Seite eigentlich unnötig...aber daher ich die wegen der Blätterfunktion doch alle brauch, stecke ich jetzt fest! Wie kann ich nur das benötigte Material abrufen! Mit LIMIT, ja....aber was soll ich da angeben, wie kann ich das errechnen!

wilko
 
Alt 30.06.2004, 17:15  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von wilko
Zitat:
Zitat von meikel
2. wenn Du 'blättern' willst, warum selektierst Du eigentlich nicht das, was Du brauchst? Oder willst Du zwei Blätterfunktionen: eine für das neue und eine für das alte Zeuch?
Ich gebe zur Zeit das neue und das alte untereinander aus. Das soll so bleiben, nur sollen pro Seite halt nur 10 Beiträge angezeigt werden!
Noch mal: Betrifft das
a. 10 alte *und* 10 neue Beiträge
oder betrifft das
b. 10 Beiträge insgesamt?

Falls a:
2 Querys. In die WHERE Klausel (ähnlich der von b) dann zusätzlich noch die "Datumsgrenze" reinpacken.

Falls b:
mit
SELECT ... WHERE id<= $id LIMIT 0,10 ORDER BY datum DESC
10 Beiträge abholen. Bei der Ausgabesammlung fragst Du einfach ab, ob datum < heute - 7Tage ist.

In beiden Fällen benötigst Du für die Blätterfunktion noch die ID des ersten und des letzten Beitrages.
SELECT MIN(id) AS erster, MAX(id) AS letzter FROM...
 
Alt 30.06.2004, 17:16  
Gast
 
Beiträge: n/a
Standard

A ist der Fall!

Aber danke für den ID ansatz!

wilko
 
Alt 30.06.2004, 17:20  
Gast
 
Beiträge: n/a
Standard

eh b ist der fall

wilko
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] MySQL - ERROR 1044 bei erstellen einer Datenbank _youngenterpriser_ Datenbanken 2 05.02.2008 17:56
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
PHP 5.1.2 mySQL 5.0.19 MS-SQL 2005 IIS 6.0 Shakaar PHP-Fortgeschrittene 10 26.03.2006 22:23
[Erledigt] MYSQL Problem Datenbanken 4 09.02.2006 15:14
Kein Zugriff über ODBC mit der IP-Adresse auf MySql DB Datenbanken 4 09.02.2006 11:04
[Erledigt] Mysql 4.1.x unter php 4.3.9 Datenbanken 3 15.11.2005 13:49
Schnittstelle zwischen PHP und MySQL klappt net !!! Datenbanken 16 16.10.2005 14:24
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
MySQL &amp;amp; PHP: Problem mit Password() Datenbanken 10 19.09.2005 11:00
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
MYSQL Verwaltung Stümper Datenbanken 1 25.11.2004 10:10
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
[Erledigt] PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql blättern, mysql ergebnisse jünger als zwei wochen, mysql sortieren blättern, http://www.php.de/php-tipps-2004/3942-erledigt-blaettern-mit-2-mysql-querys.html

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:08 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.