php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #16 (permalink)  
Alt 30-07-2009, 23:42
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

Nach Deinen Angaben habe ich nun folgenden CODE, der leider auch nicht funktioniert.

PHP-Code:
$abfrage_content mysql_query ("SELECT t0.content, t0.id, t0.update_time, t0.status, t0.sprache
FROM $tab_content t0 
LEFT JOIN $tab_content t1 on USING (id) and t1.update_time <= '$datum_jetzt'  limit 1 
WHERE t0.content LIKE '%$search%' && t0.update_time <= '$datum_jetzt' && t0.sprache = '$default_sprache'  order by update_time "
); 
Mit Zitat antworten
  #17 (permalink)  
Alt 31-07-2009, 00:06
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo sepp,

das Problem ist immer noch dasselbe: Du musst entweder using nehmen (und nichts anderes) oder du nimmst on und kannst dann mehrere Bedingungen mit and oder or verknüpfen.

Gruß,

Anja
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #18 (permalink)  
Alt 31-07-2009, 00:26
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

So habe ich es nun auch versucht,,,,ich habe verschiedenes ausgetestet leider immer mit dem selben Resultat... ;-(

PHP-Code:
$abfrage_content mysql_query ("SELECT t0.content, t0.id, t0.update_time, t0.status, t0.sprache 
FROM $tab_content t0  
LEFT JOIN $tab_content t1 on(id) and t1.update_time <= '$datum_jetzt' and limit 1  
WHERE t0.content LIKE '%$search%' && t0.update_time <= '$datum_jetzt' && t0.sprache = '$default_sprache'  order by update_time "
); 
Mit Zitat antworten
  #19 (permalink)  
Alt 31-07-2009, 00:30
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Jetzt benutzt du ON genau so wie du vorhin USING benutzt hast. Wenn es dasselbe wäre, würde es ja nicht verschieden heißen. Versuchs doch mal mit
Code:
...
FROM tabelle1
JOIN tabelle2 on tabelle1.spalte1 = tabelle2.spalte2 and tabelle2.spalte3 = 'irgendwas'
dein
Code:
and limit 1
muss da auch weg. Du solltest dich noch etwas mehr mit der Syntax beschäftigen. Es sieht so aus, als ob du dir da dein eigenes Zeug ausdenkst, was aber leider so nicht geht.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #20 (permalink)  
Alt 31-07-2009, 00:38
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

Du meinst So

PHP-Code:
FROM $tab_content t0  
LEFT JOIN $tab_content t1 on  t0
.id t1.id  and t1.update_time <= '$datum_jetzt' and limit 1
WHERE t0
.content LIKE '%$search%' && t0.update_time <= '$datum_jetzt' && t0.sprache '$default_sprache'  order by update_time "); 
Da bekomme ich aber immernoch einen Fehler...ohne Limit gehts aber mit viel zu vielen Ergebnissen

Das Problem ist; ich will nur die Zeilen durchsuchen welche am nächsten beim aktuellen Datum liegen pro id
Mit Zitat antworten
  #21 (permalink)  
Alt 31-07-2009, 01:00
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Wie gesagt, das LIMIT darf dort nicht hin, wenn dann kommt es ganz zum Schluss.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #22 (permalink)  
Alt 31-07-2009, 01:22
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

aber wenn ich es zum Schluss mache gibt er mir nur ein reslutat....ich will aber alle Resultate welchen pro id das neuste Datum haben
Mit Zitat antworten
  #23 (permalink)  
Alt 31-07-2009, 01:40
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ok, jetzt hab ich es verstanden. Das ist eine der trickreichsten Abfragearten.

Du brauchst also den Datensatz mit dem größtmöglichen Wert des Feldes update_time, der aber kleiner sein muss, als das heutige Datum.

(Die Frage die sich mir an dieser Stelle stellt: gibt es auch geplante Updates, die in der Zukunft liegen oder reicht es auch aus, einfach das Maximum zu nehmen, weil keins größer sein kann als heute?)

Dazu musst du die Tabelle zunächst mit sich selbst LEFT JOINen, was eigentlich schon der Trick ist. Du verwendest dabei einen kleiner-als-Vergleich und nimmst dann den Datensatz, der diesen nicht mehr erfüllen kann. Durch den LEFT JOIN ist der rechte Teil dann komplett NULL und das stellen wir in der WHERE-Klausel als Bedingung fest. Wenn das nämlich passiert, also t1.datum < t2.datum nicht mehr erfüllbar ist, dann ist t1.datum das Maximum:

Code:
SELECT ...
FROM dieTabelle AS t1
LEFT JOIN dieTabelle AS t2 ON t1.datum < t2.datum
WHERE t2.irgendeineSpalte IS NULL
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (31-07-2009 um 02:13 Uhr)
Mit Zitat antworten
  #24 (permalink)  
Alt 31-07-2009, 01:47
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

zu Deiner Frage: Ja, es gibt auch content in der zukunft aber die sollen nicht beücksichtigt werden.

Zum Code: Das ist mir zur Zeit zu schwer zum interpretieren, ist schon spät! Mal sehen ob ich das noch auf die Reihe kriege?
Mit Zitat antworten
  #25 (permalink)  
Alt 31-07-2009, 01:52
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Sorry, hab noch einen Nachtrag zu "WHERE t2.irgendeineSpalte IS NULL": Mit irgendeineSpalte meine ich eine, die als NOT NULL deklariert ist. Nur so kannst du sicherstellen, dass die rechte Seite des JOINs aufgrund des gescheiterten Vergleichs in der ON-Klausel NULL ist und nicht zufällig, weil es einen Datensatz gibt, der in dieser Spalte wirklich NULL ist.

Wenn es auch welche in der Zukunft gibt, wird es noch ein Stück komplizierter und da kommt man um Subselects nicht mehr herum.

EDIT: Das war ne sehr schöne Knobelaufgabe und ich nehme das eben gesagte zurück: Es geht auch ohne Subselects:

Code:
SELECT ...
FROM tabelle as t1
LEFT JOIN tabelle AS t2 ON (t1.datum < t2.datum AND t2.datum <= now()) OR t1.datum > now()
WHERE t2.eineNotNullSpalte IS NULL;
Die Datumsspalte sollte dabei unbedingt einen Index bekommen, damit das alles auch schön flott geht.

Falls du lieber mit Hash Indizes arbeitest: in diesem Falle unbedingt BTree verwenden! Falls dir das grad nichts sagt, auch nicht schlimm, standardmäßig wird immer BTree verwendet.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (31-07-2009 um 03:08 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Join PHPler SQL / Datenbanken 0 26-05-2008 16:46
[LEFT JOIN] Weiteres Left Join Anhängen mit Sortierfunktion Laire SQL / Datenbanken 3 11-01-2008 09:38
[SQL JOIN] Join mit zählen in einer anderen Tabelle tontechniker SQL / Datenbanken 1 19-05-2006 11:03
Join On antman SQL / Datenbanken 1 04-11-2004 17:18
Inner Join und Outer Join newhx SQL / Datenbanken 1 11-02-2002 22:28

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:01 Uhr.