Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL Abfrage
Wenn ich in jede seite einen counter einbaue,
und dann auf einer seite zumindest die 10, 20 oder 30 meistaufgerufenen seiten anzeigen möchte, wie muss dazu dann die sql abfrage lauten????
irgendwie so, aber ich komme nicht weiter, also bitte helft mir:
select id,titel,interpret,counter from lyric
where counter ..?? order by counter limit 30
Troublegum 27-03-2002, 21:57 SELECT spalten FROM tabelle ORDER BY counter DESC LIMIT 30
PS: Du hast ne Lyricsseite ?
Wie lautet denn die URL ? Ich hab auch eine -> www.lyricszone.de
Ist aber im Moment down, weil neue Server installiert werden.
die kennt ihr schon, jetzt bastle ich an allem in php,
könnte bei fragen ein bissel unterstützung gebrauchen,
habt ihr jetzt einen eigenen server, wenn ja, wo wird er stehen?
oder ist es einer von ckras?
www.liedertexte.geldflo.de
Danke für die schnelle antwort.
danke, es hat wunderbar funktioniert,
jetzt hätt ich noch ne sql abfrage die ich net kenne,
die eine sollte so aussehen
select interpret from tabelle where interpret like buchstabe% order by interpret
bei interpret soll ein link erzeugt werden und wenn jemand draufklickt, dann sollen nur links zu texten des interpreten angezeigt werden, wie muss ich dieabfragen ineinander schachteln? oder brauch ich ne neue php seite dazu???
Troublegum 28-03-2002, 00:11 Hi flo,
ja die kenne ich :)
Also die Liste erstellst du wie gesagt mit
SELECT * FROM tabelle WHERE interpret LIKE 'A%' ORDER BY interpret
Damit listest du alle Datensätze, deren Interpret mit A anfängt.
Wenn du die texte anzeigen lassen willst,
reicht folgendes:
SELECT * FROM tabelle WHERE interpret='Michael Jackson'
Damit listest du alle Datensätze von Michael Jackson
Wenn du was anderes gemeint hast, erklär es genauer.
Für die Zweite sql Abfrage,
steht die jetzt sozusagen intergriert in den link der ersten,
oder ist es sowas mit variablenübertrag,
wenn jemand draufklickt, dann wird die variable in die zweite abfrage gesetzt, und dann aufgelistet,
oder wird mit einem klick auf eine andere seite weitergeleitet, und mit dem übertrag der variablen in die select abfrage auf der anderen seite,
das ist mir noch ein bissel unklar!!
mal ne andere frage, gibt es eigentlich irgendeine software, die html dokumente in ein sql datenbank umwandelt???
sonst ist es ganz schön anstrengend alle docs in die datenbank zu übertragen :D
gruß
flo
Also jetzt hab ich folgendes problem:
SELECT * FROM tabelle where interpret like 'D%' order by interpret
es klappt
dann kann jm auf interpret klicken
href='interpret.php?interpret=$articleDb->interpret'>
so und auf der nächsten seite sollten dan die titel des interpreten
angezeigt werden, es klappt aber net mit der übergabe der daten
hab es so versucht
SELECT * FROM tabelle where interpret like '.$interpret' order by titel
und auch so SELECT id,titel,interpret FROM lyric where interpret= '.$interpret' order by titel
irgendwie klappt es net
hilfe
aufgezählt soll dann werden
href='lyric.php?id=$articleDb->id'> $articleDb->titel
Troublegum 29-03-2002, 00:05 So ist die Abfrage korrekt:
SELECT id,titel,interpret FROM lyric WHERE interpret='$interpret' ORDER BY titel
jetzt hab ich noch ein problem,
ich wollte die schleife benutzen, hier aus dem forum:
die siehts so aus:
$sql = "";
for($i=0;$i<count($query_elements);$i++) {
if($sql) {
$sql .= " AND";
$sql .= " interpret='$query_elements[$i]'";
}
}
das problem dabei ist,
das ich bei $i=0 die ausgabe ohne AND haben will,
und bei $i>0 mit AND,
das ganze soll dann natürlich in die selectabfrage.
Danke für eure Hilfe.
Troublegum 29-03-2002, 13:29 Du hast den Code ziemlich verhunzt. :rolleyes:
Ausserdem nützt dir das so gar nichts, wenn du nach einem
konkreten Interpreten suchst und erst recht nicht, wenn du den = Operator benutzt. :teach:
hier ist nochmal der Code (http://www.php-resource.de/forum/showthread.php?s=&threadid=5984)
$sql = "";
for($i=0;$i<count($query_elements);$i++) {
if($sql) {
if ($i > 0) {
$sql .= " AND";
}
$sql .= " interpret='$query_elements[$i]'";
}
}
Troublegum 29-03-2002, 13:33 Eigentlich braucht er die Abfrage von $i gar nicht.
Er setzt $sql sowieso vorher zurück.
@Flo: Wozu brauchst du die Abfrage eigentlich ?
Erkläre mal den Kontext und die Situation.
ich habs jetzt mit dem nicht verhunzten Code so probiert:
$query=$interpret;
$query_elements = explode(" ",addslashes($query));
for($i=0;$i<count($query_elements);$i++) {
if($sql) {
$sql .= " AND"; /// oder AND (wie du willst)
}
$sql .= " interpret='$query_elements[$i]'";
}
$str_requete = "SELECT * FROM tabelle WHERE ($sql) ORDER BY spalte";
Bei Interpreten dessen namen nur aus einem Wort bestehen hat es funktioniet, bei interpreten mit mehreren Wörten nicht,
und bei dem verhunzten Code gabs dann ne fehlermeldung bei
AND interpret='...' AND interpret='...'
wie kannich das problem lösen?
Kann ich das nicht, dann kann ich auch keine Suchmaske bauen :(
Achso, die erklärung:
ich hab eine seite, auf der alle Interpreten die mit dem Buchstaben D anfangen, aufgezählt sind.
Dann klickt jm auf den link "Die Ärzte",
auf der nächsten seite sollen die Titel der texte von "Die Ärzte" die in der datenbank sind, aufgezählt werden.
Dazu wollte ich diesen schnipsel verwenden
:(
Troublegum 29-03-2002, 14:05 Dazu reicht
SELECT * FROM tabelle WHERE interpret='Die Ärzte'
Du machst es dir auch schwer :rolleyes:
Ja, aber wenn Die Ärzte von der Seite
.../interd.php
zu seite ../interpret.php?interpret=Die20%Ärzte
übergeben werden
und wenn ich dann in die
Selectabfrage
...Wherer interpret='$interpret' eingebe
kommt doch ne fehlermeldung:(
Troublegum 29-03-2002, 14:18 Ja dann poste bitte deinen Code.
Rumjammern hilft in den wenigsten Fällen etwas :teach:
Aso jetzt klappt es schon mit namen, die aus zwei wörtern bestehen, aber sowas findet es nicht:
http://localhost/lyric2/interpret.php?interpret=Dieter%20Krebs%20&%20Gundula
Mein Codeg für interpreten nach D sortiert:
<?php
require "ezine_db.inc.php";
$ezine_db = ezine_connecte_db();
$str_requete = "SELECT id,titel,interpret FROM lyric where interpret like 'D%' order by interpret";
$result_articles = mysql_query ($str_requete,$ezine_db) or ezine_mysql_die();
print ('<table border=0>');
while ($articleDb =mysql_fetch_object($result_articles))
{
print("
<tr>
<td width='200'><a href='interpret.php?interpret=$articleDb->interpret'>$articleDb->interpret</a></td>
<td>$articleDb->titel</td>
</tr>
");
}
print ('</table>');
Und dann die Seite auf der die Titel aufgelistet werden sollen:
<?php
require "ezine_db.inc.php";
$ezine_db = ezine_connecte_db();
$str_requete = "SELECT id,titel,interpret FROM lyric WHERE interpret='$interpret' ORDER BY titel";
$result_articles = mysql_query ($str_requete,$ezine_db) or ezine_mysql_die();
print ('<table border=0>');
while ($articleDb =mysql_fetch_object($result_articles))
{
print("
<tr>
<td width='200'><a href='lyric.php?id=$articleDb->id'>$articleDb->titel</a></td>
<td>$articleDb->interpret</td>
</tr>
");
}
print ('</table>');
?>
Troublegum 29-03-2002, 14:34 Probier mal das: (ohne Gewähr). ;)
datei1.php -> aufgerufen wird sie über datei1.php?char=D (alle Interpreten mit D.
<?php
require "ezine_db.inc.php";
$ezine_db = ezine_connecte_db();
$str_requete = "SELECT id,titel,interpret FROM lyric where interpret like '$char%' order by interpret";
$result_articles = mysql_query ($str_requete,$ezine_db) or ezine_mysql_die();
echo "<table border=0>";
while ($row =mysql_fetch_array($result_articles))
{
echo "<tr>
<td width='200'><a href='interpret.php?interpret=".urlencode($row[interpret])."'>$row[interpret]</a></td>
<td>$row[titel]</td>
</tr>";
}
echo "</table>";
?>
<?php
require "ezine_db.inc.php";
$ezine_db = ezine_connecte_db();
$interpret = urldecode($interpret);
$interpret = addslashes($interpret);
$str_requete = "SELECT id,titel,interpret FROM lyric WHERE interpret='$interpret' ORDER BY titel";
$result_articles = mysql_query ($str_requete,$ezine_db) or ezine_mysql_die();
echo "<table border=0>";
while ($row =mysql_fetch_array($result_articles))
{
echo "<tr>
<td width='200'><a href='lyric.php?id=$row[id]'>$row[titel]</a></td>
<td>$row[interpret]</td>
</tr>";
}
echo "</table>";
?>
Hmm,
konnte es noch nicht ausprobieren:
Fatal error: Call to undefined function: url_encode() in C:\apache\htdocs\lyric2\interd2.php on line 217
zeile 217:
<td width='200'><a href='interpret2.php?interpret=".url_encode($row[interpret])."'>$row[interpret]</a></td>
ich habs ma ohne decode und encode probiert, da funzt alles, nur halt die längeren namen werden nicht gefunden,
ich schätze aber dass mein interpreter die funktionen nicht kennt,
und es auf nem server funktionieren wird ;)
deshalb danke ich dir für den codeschnipsel, sieht ja ziemlich anders als meiner, wird mir aber weiterhelfen.
da ich mich erinnern kann, auch wenn eurer server immer noch net erreichbar ist, dass es bei euch auf der Seit soähnlich funktioniert.
Danke....:)
Troublegum 29-03-2002, 18:07 Sorry, Flo.
Das liegt nicht an deinem Interpreter. Ich hatte mir vertippt. :(
Bitte nochmal ausprobieren. (Beispiel korrigiert.)
Ich denke, du hast die Zeit dazu, oder ?
Ja, unser Provider zieht um. Das kann noch ein,zwei Tage dauern. Aber was solls.
Unsere Datenbankstruktur ist aber etwas unterschiedlich. ;)
MfG Troublegum
es funktioniert schon ganz gut,
hab es zur Probe hier gepackt.
http://mitglied.lycos.de/witzetotal/lyric/
Allerdings hat es noch ein paar fehler:
Wenn man auf einen interpreten mit Sonderzeichen klickt
z.B. Texte von Destiny's Child
oder
auf meinem PC von A+ oder ...("Cats")
verursacht ee einen fehler,
dagegen A*Teens wird korrekt angezeigt,
vielleicht hast du noch eine idee
Troublegum 30-03-2002, 00:20 Anscheinend sind Magic Quotes an. (Destiny's Child).
Lass die Zeile mit addslashes() weg.
auf meinem PC von A+ oder ...("Cats")
verursacht ee einen fehler,
Was willst du mir damit sagen bitte ? :confused:
PS: Ich ersetze ' und " immer durch ´ und "
Das würde auch gehen.
Dankeschön für deine Hilfe,
addslashes hab ich entfernt und jetzt funktioniert fast alles prima.
zwar wird bei destiny's child ein slash angezeigt Destiny\'s Child
dafür werden die texte aber gefunden, und darauf kommt es an.
Allerdings gibts auch ne gruppe, die A+ heißt und da wird nur der
buchstabe A angezeigt (auf dem localhost).
Die kennt aber wahrscheinlich sowieso fast keiner.
Hast du vielleicht einen Tipp, wie ich am besten die 5000 texte aus dem html format in eine datenbank kriege, ohne dass ich jeden einzeln einfügen muss?
Gruß
flo
Troublegum 30-03-2002, 14:30 Original geschrieben von flo
Hast du vielleicht einen Tipp, wie ich am besten die 5000 texte aus dem html format in eine datenbank kriege, ohne dass ich jeden einzeln einfügen muss?
Jeder Text sollte wennmöglich gleich formatiert sein.
Also es sollte ein Schema in der html Datei sein, sodass
man mit Reg. Ausdrücken den Text und so herausfiltern kann.
In php hab ich aber absolut keinen Plan davon. Ich mach sowas immer mit Perl.
die sind schon alle relativ gleich formatiert.
nur halt einzeln und nicht in einer textdatei.
ich hab jetzt noch ne Frage zum Eingabeformular,
da nicht alle dort immer alles auf einmal eingeben, schicken sie diesen manchmal mit einem leeren feld ab.
da wollte ich einen riegel mit einer schleife vorschieben:
if ($titel=="" or $interpret=="" or $song=="" )
{
echo "<center><font color=#FFFFFF size='+1'>Leider hast du das Formular nicht vollständig ausgefüllt.</font>";
echo "<center><font color=#FFFFFF size='+1'>Du musst mindesten den Titel, Interpreten und den Songtext eingeben und erst dann das Formular abschicken.</font>";
}
else ...
So das problem ist, dass es bei der variablen titel und interpret funktioniert, bei song nicht :(, song ist im formular auch ein textarea, vielleicht ligts daran?
Dann wollt ich noch was zu der tabelle nach Interpreten fragen,
so wie die jetzt ist, wird z.B. "Die Ärzte so oft ausgegeben, wie es songtexte in der tabelle von denen gibt,
kann ich es irgendwie geschickter machen, so dass der interpret nur einal erscheint, und daneben nur die Anzahl der texte, die zu denen gehören und halt erstauf der nächsten seite die titel?
gruß
Flo
|
-
- |