CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
25.11.2005, 13:19:15
|
Junior Member
|
|
Registriert seit: Nov 2005
Ort: Bremen
Beiträge: 437
|
|
Abfrage LEFT JOIN verdreht die Plausibilitäten
... habe Verständnisproblem??
Folgende Abfrage erzeugt die richtige Datenmenge und die nötigen Plausibilitäten werden über PHP abgefragt. Es funktioniert soweit.
$result = mysql_query("SELECT * FROM tbl1, tbl2 WHERE tbl1.Wert = tbl2.Wert AND tbl1.Wert2 >= '".$_POST['AUSWAHL']."' ORDER BY tbl1.Wert LIMIT 50") or die(mysql_error());
while($row = mysql_fetch_array($result)){...
Nun ist es aber so, dass eine 3te tbl abgefragt werden muss, ob eine entsprechende ID vorhanden ist. Wenn ja soll diese mit dem Datensatz der beiden anderen DB verbunden und ausgegeben werden.
Benutze ich nun folgende Anweisung werden die Plausis, die per PHP geprüft werden, verändert.
$result = mysql_query("SELECT * FROM tbl1, tbl2 LEFT JOIN tbl3 ON ('tbl1.ID' = 'tbl3.ID') WHERE tbl1.Wert = tbl2.Wert AND tbl1.Wert2 >= '".$_POST['AUSWAHL']."' ORDER BY tbl1.Wert LIMIT 50") or die(mysql_error());
while($row = mysql_fetch_array($result)){...
Was mache ich falsch?
cu,
Franzx
Geändert von Franzx (25.11.2005 um 13:36:46 Uhr)
Grund: war zu schnell
|
06.12.2005, 09:23:45
|
Junior Member
|
|
Registriert seit: Nov 2005
Ort: Bremen
Beiträge: 437
|
|
AW: Abfrage LEFT JOIN verdreht die Plausibilitäten
Neuer Lösungsversuch:
$result = mysql_query("SELECT * FROM tbl1, tbl2, tbl3 WHERE tbl1.cnt = tbl3.cnt AND tbl1.id >= '".$_POST['BLOCKAUSWAHL']."' GROUP BY tbl1.id LIMIT 50") or die(mysql_error());
Aus tbl1, tbl2 werden alle Felder richtig ausgegeben. tbl1 und tbl2 haben die gleiche Anzahl von Zeilen und jede ID ist in jeder der beiden tbl vorhanden, also eine einfache Standardabfrage.
In tbl3 allerdings gibt es nur wenige Datensätze, die allerdings, sofern vorhanden auch über die eindeutige id zuordenbar sind.
Leider gibt nun aber der query nur die Infos aus dem ersten gefundenen Datensatz, sprich die id aus allen drei tbl ist gleich, aus der tbl3 zurück und wiederholt diesen für jeden weiteren Datensatz
Also es werden schon alle vorhandene Datensätze ausgegeben, doch aus tbl3 nur der erst gefundene und dieser wird dann fälschlicherweise mit den sonst übereinstimmenden id's verknüpft.
INNER Join hilft mir dabei nicht weiter, da dann nur die Datensätze aus entweder oder ausgegeben werden.
LEFT Join hilft nicht weiter, da da zwar in der Anzahl der Datensätze alles richtig ist, es werden allerdings keine Werte übermittelt, ich meine {$row['Wert_aus_tbl3']} ist leer.
Hat jemand eine Idee.
Gruß,
Franzx
|
06.12.2005, 10:09:20
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Abfrage LEFT JOIN verdreht die Plausibilitäten
Könntest du mal die Strukturen der drei Tabellen und ein paar Beispieldatensätze zeigen und dann daran erklären, wie das Ergebnis deiner Abfrage aussehen soll?
|
06.12.2005, 10:52:55
|
Junior Member
|
|
Registriert seit: Nov 2005
Ort: Bremen
Beiträge: 437
|
|
AW: Abfrage LEFT JOIN verdreht die Plausibilitäten
... tbl1 hat 40 Felder - überwiegend Datumsfelder
Feld1 = ID [varchar]; Feld2 = Produktbeschreibung [longtext]; Feld3 = cnt [smallint]; danach Datumsfelder die sich nur im Feldnamen unterscheiden wie Einkauf; Preisänderung; Preisänderung2; Preisänderung3; Produkterneuerung; ...
tbl2 hat 3 Felder
Feld1 = cnt[int]; Feld2 = Hersteller [char255]; Feld3 = Gebiet [char50]
tbl3 ist wie die tbl1 aufgebaut beinhaltet aber einfach nur spezielle Produkte die nur dann in Frage kommen wenn eben in der Tabelle 1 kein Produkt, nur 1 Produkt oder nur sehr alte Produkte zur Verfügung stehen.
Abgefragt wird der gesamte Datensatz aus allen Feldern. Bei dieser Abfrage wird schon geprüft, bzw. soll schon geprüft werden ob eben auch in tbl3 ein Wert eingetragen ist, damit gegebenenfalls auch diese Werte zur Verfügung stehen und ausgegeben werden sollen.
Ob letzendlich ein Datensatz angezeigt und welche Felder daraus angezeigt werden sollen, löse ich in PHP indem ich eben auf {!empty($row['datumsfeldx']} oder {empty($row['datumsfeld1']} abfrage.
Somit kann ich ein html-template verwenden und bestimme durch die Abfragen ob es angezeigt wird und was, welche Felder, angezeigt werden.
|
06.12.2005, 11:41:50
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Abfrage LEFT JOIN verdreht die Plausibilitäten
Versuch mal sowas:
Code:
SELECT
...
FROM
tbl1
INNER JOIN
tbl2
ON
tbl1.cnt = tbl2.cnt
LEFT OUTER JOIN
tbl3
ON
tbl1.cnt = tbl3.cnt
|
06.12.2005, 12:19:59
|
Junior Member
|
|
Registriert seit: Nov 2005
Ort: Bremen
Beiträge: 437
|
|
AW: Abfrage LEFT JOIN verdreht die Plausibilitäten
Phantastisch :-)
Es funktioniert!
Vielen Dank!
Gruß,
Franzx
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:37:54 Uhr.
|