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
  #1 (permalink)  
Alt 25-06-2009, 03:11
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard Join

Hallo zusammen

Ich ersuche um Eure wertvolle Hilfe.

Ich habe alle meine Daten in einer Tabelle abgelegt, nach ID und mit Datum. Nun gibt es verschiedene Ergebnisse mit der selben ID und diversen Datum.

Ich mache nun eine Suchabfrage und will nur jeweils ein Resultat mit dem neuestem Datum angezeit bekommen.

Bis auf diese Einschränkkung würde die Abfrage funktieren - Also den folgenden CODE ohne die Left Join drin.
PHP-Code:
$datum_jetzt mktime(date ("H"),date ("i"),date ("s"), date ("m") , date ("d"), date("Y"));
$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 USING (id) on t1.update_time <= '$datum_jetzt' desc limit 1
WHERE t0.content LIKE '%$search%' && t0.update_time <= '$datum_jetzt' && t0.sprache = '$default_sprache'  order by update_time "
);
$gesamt_search_abfrage_search mysql_num_rows($abfrage_content); 
Ich erhalte folgenden Fehler:
HTML-Code:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
Sagt mir irgendwas stimmt nicht in der Left Join abfrage...aber ich komme einfach nicht dahinter.....

Wer kann mir einen Tipp geben? DANKE
Mit Zitat antworten
  #2 (permalink)  
Alt 25-06-2009, 08:04
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Nein, die Meldung sagt dir lediglich, dass die Ressource, die du an die Funktion mysql_num_rows übergeben hast, kein gültiges Abfrageergebnis ist. Das lässt zwar darauf schließen, dass diese fehlgeschlagen ist, aber was genau, das wird dir an dieser Stelle sicher nicht gesagt.

Um herauszufinden, wo das Problem ist, haben wir ein paar Tipps zusammengefasst die grundlegendstes Debugging erklären. Schau mal in den Abschnitt "MySQL will nicht": Klick
Mit Zitat antworten
  #3 (permalink)  
Alt 25-06-2009, 08:49
Wyveres
 Registrierter Benutzer
Links : Onlinestatus : Wyveres ist offline
Registriert seit: Dec 2006
Ort: Rügen
Beiträge: 763
Blog-Einträge: 2
Wyveres ist zur Zeit noch ein unbeschriebenes Blatt
Wyveres eine Nachricht über ICQ schicken
Standard

1. $datum_jetzt is int nutz es auch als int und nicht als string.

und

2. das liest sich grottig.

PHP-Code:
$sql="SELECT t0.content, t0.id, t0.update_time, t0.status, t0.sprache
FROM "
.$tab_content." t0 
LEFT JOIN "
.$tab_content." t1 USING (id) 
ON t1.update_time <= "
.$datum_jetzt." DESC LIMIT 1
WHERE t0.content LIKE '%"
.$search."%' 
AND t0.update_time <= "
.$datum_jetzt.
AND t0.sprache = '"
.$default_sprache."'  
ORDER BY update_time"

__________________
Bitte Beachten.
Foren-Regeln
Danke
Mit Zitat antworten
  #4 (permalink)  
Alt 25-06-2009, 11:29
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

Unset: was meinst Du genau damit? Wie kann ich es als int handeln?

Das bekomme ich im Debug
Zitat:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'on t1.update_time <= '1245922625' desc limit 1 WHERE t0.content LIKE '%mill%' ' at line 3
Wyveres: Danke für das Script, komme aber nicht ganz weiter, kriege nach wie vor Fehler auf der Zeile
PHP-Code:
while ($row mysql_fetch_array ($abfrage_content)) 
Ich habe Dein Beispiel genommen und in meine Struktur eingebunden....habe ich was flasch gemacht?

PHP-Code:
$datum_jetzt mktime(date ("H"),date ("i"),date ("s"), date ("m") , date ("d"), date("Y"));
$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 USING (id)  
ON t1.update_time <= "
.$datum_jetzt." DESC LIMIT 1 
WHERE t0.content LIKE '%"
.$search."%'  
AND t0.update_time <= "
.$datum_jetzt."  
AND t0.sprache = '"
.$default_sprache."'   
ORDER BY update_time"
);
$gesamt_search_abfrage_search mysql_num_rows($abfrage_content);
$nrv="0";
while (
$row mysql_fetch_array ($abfrage_content)) 


Geändert von sepp (25-06-2009 um 11:38 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 25-06-2009, 11:39
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von sepp Beitrag anzeigen
Unset: was meinst Du genau damit? Wie kann ich es als int handeln?
Ich hab nix von int geschrieben, ich will nur, dass du mysql_error wie im verlinkten Beitrag beschrieben auswertest.
Mit Zitat antworten
  #6 (permalink)  
Alt 25-06-2009, 11:41
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

Ja, sorry das hatte ich verwechselt mit int......die Fehlerrutine habe ich durchlaufen lassen und im letzten Beitrag gepostet
Mit Zitat antworten
  #7 (permalink)  
Alt 25-06-2009, 11:53
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Dann guck dir die Fehlermeldung doch an, dir wird ja sogar der Abschnitt genannt, wo dein Query nicht in Order ist.
Mit Zitat antworten
  #8 (permalink)  
Alt 25-06-2009, 11:55
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Entweder USING oder ON. Beides zusammen geht nicht.
Mit Zitat antworten
  #9 (permalink)  
Alt 25-06-2009, 12:14
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

Ja, uset das Problem liegt da
Zitat:
't1.update_time <= '1245924804' desc limit 1 WHERE t0.content LIKE '%million%' ' at line 3
Das weiss ich eingentlich seit dem erstem Post....nur weiss ich keine Lösung dafür. Sorry


onemorenerd : Wenn ich entweder on oder USING entferne bekomme ich den selben fehler
Mit Zitat antworten
  #10 (permalink)  
Alt 25-06-2009, 12:17
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Vielleicht liegts auch am Limit? Darf man das da verwenden?!
Mit Zitat antworten
  #11 (permalink)  
Alt 25-06-2009, 12:22
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

Das weiss ich nicht ob man es darf, geht auber auch nicht ohne limit und ohne on

Zitat:
LEFT JOIN $tab_content t1 USING(id) t1.update_time <= '$datum_jetzt'
Mit Zitat antworten
  #12 (permalink)  
Alt 25-06-2009, 13:09
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

USING(id) t1.update_time <= '$datum_jetzt'

Das ist syntaktisch falsch! MySQL :: MySQL 5.1 Reference Manual :: 12.2.8.1 JOIN Syntax
Mit Zitat antworten
  #13 (permalink)  
Alt 25-06-2009, 13:21
Wyveres
 Registrierter Benutzer
Links : Onlinestatus : Wyveres ist offline
Registriert seit: Dec 2006
Ort: Rügen
Beiträge: 763
Blog-Einträge: 2
Wyveres ist zur Zeit noch ein unbeschriebenes Blatt
Wyveres eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von onemorenerd Beitrag anzeigen
USING(id) t1.update_time <= '$datum_jetzt'

Das ist syntaktisch falsch! MySQL :: MySQL 5.1 Reference Manual :: 12.2.8.1 JOIN Syntax

Das hab ich ihm auch schon gesagt ;D und ich dachte eigentlich das er das DESC LIMIT von alleine drauf kommt ... das es dort unsinn ist.


zumal DESC nur im ORDER BY sinn macht.

;D und ein LIMIT eins in einem JOIN kann ich nicht beantworten aber sinn machts auch nur am ende
__________________
Bitte Beachten.
Foren-Regeln
Danke
Mit Zitat antworten
  #14 (permalink)  
Alt 25-06-2009, 14:24
sepp
 Registrierter Benutzer
Links : Onlinestatus : sepp ist offline
Registriert seit: Aug 2007
Beiträge: 296
sepp kann nur auf Besserung hoffen
Standard

Es geht auch nicht wenn das limit weg ist!!!!

Wie kann ich denn aussuchen dass jeweils nur ein Datensatz (limit), nähmlich der welcher zeitlich zum schluss drin ist (t1.update_time <= '$datum_jetzt') ausgibt?
Mit Zitat antworten
  #15 (permalink)  
Alt 25-06-2009, 15:24
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Verstehst du die Syntax auf der verlinkten Dokuseite nicht? Dann "übersetze" ich das mal für dein konkretes Problem:

SELECT <Spalten> FROM <Tabelle> JOIN <Tabelle> ON <Bedingung> AND <Bedingung>

Hier noch mal das was du bisher (falsch) machst:

SELECT <Spalten> FROM <Tabelle> JOIN <Tabelle> USING(<Spalte>) <Bedingung>


Wenn der Groschen jetzt noch nicht fällt, dann wirf die Query am besten weg und baue sie von Null wieder neu auf - Schritt für Schritt und zwischendurch immer wieder testen.
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

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
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
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:54 Uhr.