Mysql Abfrage, ich bin am verzweifeln

samira_1986

Grünschnabel
Liebe Forumuser,
mein Ex Freund hat mir vor einiger Zeit eine kleine Datenbank aufgesetzt mit der ich Basteltipps für Mamas auf meiner Seite anbieten

möchte. Die Datenbank ist Mysql5 und die Daten lese ich per PHP Script (sagt man eigentlich der oder das Script?) aus.

Das Problem nun ist:

Die Daten werden per Eintragsid ausgegeben. Also der neuste Eintrag steht oben. Nun möchte ich aber auch bestimmte Einträge markieren

können um diese ganz oben stehen zu lassen. Der Hintergrund dabei ist, dass ich besonders schöne Basteltipps empfehlen möchte.

Ich habe die Datenbanktabelle nun schon um ein weiteres Feld erweitert, welches ich tip genannt habe und den Wert varchar 1 bekommen hat.

Es sollen nun eigentlich nur die Einträge, die in der Datenbank den Wert 1 im Feld tip haben vor der anderen Einträgen ausgegeben werden.

Die weiteren Einträge sollen weiterhin nach Eintragsid gelistet werden.

So sieht die Datenbank Abfrage aus:

Code:
$result = $db->Execute("SELECT eintragsid, titel, tip FROM basteltipps order by eintragsid desc");
 if ($result === false) die();  
 while (!$result->EOF) {

echo '<div class="eintrag"><a href="eintrag.php?id='.$result->fields[eintragsid].'">'.$result->fields[titel].'</a></div>';


 $result->MoveNext();
 }

Ich hoffe ich habe mich nicht zu kompliziert ausgedrückt. Ich habe leider von der ganzen Materie keine Ahnung und weis auch nicht mehr an wen ich mich noch wenden soll. Ich hoffe Ihr könnt mir helfen.

Liebe Grüße,
Samira
 
Zuerst einmal solltest du das Feld von VARCHAR(1) auf tinyint(1) ändern, VARCHAR ist da einfach der falsche Datentyp für. Standard Wert sollte 0 sein und 1, wenn du den Tip explizit empfiehlst.

Nun zu deiner Query. Der Trick liegt einfach im ORDER BY, das du um die Spalte "tip" erweitern musst:
Code:
SELECT eintragsid, titel, tip FROM basteltipps ORDER BY tip, eintragsid desc
Das müsste es eigentlich schon gewesen sein :)
 
Es muss eine Abfrage kommen, wo folgende Bedingung enthalten ist:
WHERE tip = 1
Falls tip = 1 nicht geht nimm tip LIKE 1
Danach kommt die 2. Abfrage, wo alle Werte drin sind ohne 1!
Weiß im Moment nicht wie man das Elegant löst, bin gerade dabei mich wieder in SQL einzufinden.

PHP:
$result = $db->Execute("SELECT eintragsid, titel, tip FROM basteltipps WHERE tip = 1 order by eintragsid desc");
 if ($result === false) die();  
 while (!$result->EOF) {

echo '<div class="eintrag"><a href="eintrag.php?id='.$result->fields[eintragsid].'">'.$re sult->fields[titel].'</a></div>';


 $result->MoveNext();
 }

$result = $db->Execute("SELECT eintragsid, titel, tip FROM basteltipps WHERE tip != 1 order by eintragsid desc");
 if ($result === false) die();  
 while (!$result->EOF) {

echo '<div class="eintrag"><a href="eintrag.php?id='.$result->fields[eintragsid].'">'.$result->fields[titel].'</a></div>';


 $result->MoveNext();
 }

Keine Angst, das drückt dir hier noch einer in schönen Quellcode aus :D
//edit: siehst ich hatte recht, stimmt den rest behandelt er als Null, und wenn du nur 0 und 1 hast, reicht die Sortierung vollkommen. 1 ist größer als 0 und ist somit vorn :D
 
ok danke, werde es gleich mal probieren. Muss ich denn extra 2 Abfragen dafür machen oder geht es auch in 1. wie Radhad geschrieben hat?
Naja ich werde gleich mehr wissen.. ;-)
Dankeschön
 
Die Abfrage von Radhad kannst du nehmen.
Da musst du nicht viel ändern in der Abfrage und es bleibt bei 1ner.
 
Vielen Dank, funktioniert soweit schonmal. Nun noch eine Frage ;-)

Wenn ich die Ergebnisse nun mit den ältesten Einträgen zuerst anzeigen lassen möchte und die Tips trotdem noch ganz oben stehen sollen müsste doch folgendes gehen oder?

Code:
SELECT eintragsid, titel, tip FROM basteltipps ORDER BY tip desc, eintragsid asc

Leider funktioniert das nicht ;-(

Über eine Antwort würde ich mich freuen.

Liebe Grüsse,
Sami


--------------------------- EDIT ---------------------

Sorry, funktioniert doch. Ich habe die ganze Zeit eine falsche Datei editiert.

Danke nochmal
 
Zuletzt bearbeitet:
Zurück