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 Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 21-11-2004, 18:35
kari_w
 Guest
kari_w
Beiträge: n/a
Standard Aus einer Abfrage zwei machen

Hallo und schönen Sonntag erstmal.

Ich ahbe hier nun lange gesucht und auch im MySQL Manual. Leider bin ich auf nichts gestossen das mir da weiterhelfen kann. Ich hoffe jemand von euch weiss da rat.

Ich weiss nicht ob dies möglich ist. Aber ich hoffe da ich so sehr viel weniger Abfragen benötige:

Ich habe einerseits diese Abfrage:

SELECT did, cid, title FROM c1

Dann verarbeite ich die dateien in WHILE und in der WHILE habe ich diese Abfrage:

SELECT did, aid, bid FROM e1 WHERE did='did_aus_der_vorherigen_abfrage'

Nun arbeite ich noch in der WHILE damit. Also eine < > abfrage. wenn da mal did keinen wert hat sind einfach aid udn bid eigentlich 0 bez "" ist ja klar und alles funktioniert.
Da dies in der WHILE ist und wenn die erste abfrage 50 ergebnise hat, habe ich mit dieser zweiten Abfrage 50 SQL Abfragen wo ggf unnötig sind.

Also habe ich es versucht eine daraus zu machen und wolte dann einfach zur ersten ungefähr dies machen:
LEFT JOIN e1 ON (c1.did=e1.did).

Und jetzt genau das Problem. Soweit ja so gut funktioniert.
Aber eben nicht ganz
Wenn nun e1 KEINEN eintrag zu diesem c1.did hat, führt er diese abfrage dann nicht aus logischerweise. Ist es nun möglich da trotzdem eine Abfrage zu machen, und ihm halt zu sagen das er dieses nur ausführt wenn auch ein wert vorhanden ist? Denn sonst führt er mir nicht alle aus, und wenn ich dies nicht drin habe kann ich nachher nicht mti e1.did arbeiten für die < > abfrage.

Ich hoffe ich konnte es einigermassen gut erkläre. Wenn noch was unklar ist probiere ich es gerne etwas besser zu erklären.

Gruss

kari_w

Ich habe gelernt die Beiträge nicht mehr weg zu editieren Wollt ich wirklich nicht. Kenne es so aus einem anderen Forum das man den Beitrag weg editiert wenn ein Thema sich erledigt hat bevor jemand antwortet
Mit Zitat antworten
  #2 (permalink)  
Alt 21-11-2004, 18:41
kari_w
 Guest
kari_w
Beiträge: n/a
Standard

Da ich aus diesem grund wohl nicht mehr editieren kann:
Der titel ist falsch
Ich meine natürlich aus zwei Abfragen eine machen sorry
Mit Zitat antworten
  #3 (permalink)  
Alt 21-11-2004, 19:11
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

anstatt LEFT JOIN machst du INNER JOIN
Mit Zitat antworten
  #4 (permalink)  
Alt 21-11-2004, 19:37
kari_w
 Guest
kari_w
Beiträge: n/a
Standard

Hallo asp2php

Erstmal danke für deine Hilfe.
Ich habe es so Probiert. Jedoch bewirkt dies nicht das was gewollt war
Nun liest er mir alle aus wo in e1 einen wert haben.

Ich probiere es mal mit etwas mehr Code zu erklären:

PHP-Code:
$result mysql_query("SELECT did, cid, title FROM c1");
 while (
$row mysql_fetch_array($result)) {
  
/* Hier haben wir noch allgemeinen code 
der momentan nicht wichtig ist für unsere Aussage */
  
$row1 mysql_query("SELECT did, aid, bid FROM e1 WHERE did='$row[did]'");
  if((
$row['cid'] > $row1['aid'] || $row['cid']>$row1['bid'])) $var1="blau";
  else 
$var1="rot";
 } 
Nun ist es so wenn ich hier:
PHP-Code:
$result mysql_query("SELECT did, cid, title FROM c1"); 
50 Resultate habe, dann macht er hier
PHP-Code:
$row1 mysql_query("SELECT did, aid, bid FROM e1 WHERE did='$row[did]'"); 
50 zusätzliche DB Afragen die ich hoffentlich verhindern kann wenn ich daraus irgendwie eine Abfrage machen kann.

Zum Problem: Nicht jeder Datensatz aus der Ersten Abfrage hat auch einen in der zweiten. Und hier ist das Problem, dass er mir mit LEFT JOIN zwar jeden datensatz ausliest, JEDOCH beachtet er mir das WHERE nicht.
Ich habe dann dies gemacht:
PHP-Code:
$result mysql_query("SELECT c.did, c.cid, c.title, e.did, e.aid, e.bid 
FROM c1 c LEFT JOIN e1 e ON (c.did=e.did) 
WHERE c.cid>e.aid OR c.cid>e.bid"
); 
Und hier ist nun das Problem, dass er mir ALLE ausgibt. Ich nehme an es liegt daran, dass nicht jeder der einträge aus c1 einträge in e1 hat.
Nur wie kann ich dies lösen?

Ich hoffe ich habe es diesmal geschaft das ganze etwas besser zu erklären.

Gruss

kari_w

Geändert von asp2php (21-11-2004 um 22:06 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 21-11-2004, 22:05
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

warum knallst du wieder 'nen Haufen von belanglosen Abfragen, die nichts mit dem zu tun, was du z.Z. hast, hierein?

Mein Antwort bleibt immer noch so wie sie ist. Zeige was du versucht hast. Ich sehe bisher keine Änderung. Du hast zwar viel geschrieben, aber nichts gezeigt, was du mit meinem Tipp gemacht hast.

btw: Achte bitte darauf, dass der Code nicht über alle Grenzen hinaus schießt. Am besten brichst du den Code so, wie das Eingabefeld breit ist.

Geändert von asp2php (21-11-2004 um 22:07 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 21-11-2004, 22:52
kari_w
 Guest
kari_w
Beiträge: n/a
Standard

Hallo asp2php

Sorry bin mir das auch nicht gewohnt. In den neuen Foren wird der Code automatisch mti scrollbalken dargestellt.

Sorry ich habe es wohl wieder gelöscht gehabt beim schreiben.

Also ich habe aus
PHP-Code:
$result mysql_query("SELECT c.did, c.cid, c.title, e.did, e.aid, e.bid 
FROM c1 c LEFT JOIN e1 e ON (c.did=e.did) 
WHERE c.cid>e.aid OR c.cid>e.bid"
); 
dies gemacht:

PHP-Code:
$result mysql_query("SELECT c.did, c.cid, c.title, e.did, e.aid, e.bid 
FROM c1 c INNER JOIN e1 e ON (c.did=e.did) 
WHERE c.cid>e.aid OR c.cid>e.bid"
); 
Nun passieren zwei Phänomene:
1. Es werden NUR noch die Einträge angezeigt die auch einen eintrag bei e1 haben.
2. Das WHERE wird nicht beachtet. (aber ob dies noch wo anders zusammenhängt weiss ich noch nicht glaube es aber nicht): Wenn ich das WHERE entferne, werden trotzdem nur die angezeigt die auch einen eitnrag in e1 haben.

Gruss

kari_w
Mit Zitat antworten
  #7 (permalink)  
Alt 22-11-2004, 09:44
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von kari_w
Nun passieren zwei Phänomene:
1. Es werden NUR noch die Einträge angezeigt die auch einen eintrag bei e1 haben.
aber das wolltest du doch, denn du hast doch geschrieben:
Zitat:
Original geschrieben von kari_w
Ist es nun möglich da trotzdem eine Abfrage zu machen, und ihm halt zu sagen das er dieses nur ausführt wenn auch ein wert vorhanden ist?
Zitat:
Original geschrieben von kari_w

2. Das WHERE wird nicht beachtet. (aber ob dies noch wo anders zusammenhängt weiss ich noch nicht glaube es aber nicht): Wenn ich das WHERE entferne, werden trotzdem nur die angezeigt die auch einen eitnrag in e1 haben.
soll heissen, dass die Bedingung in WHERE greifen soll, wenn KEIN Eintrag in e1 existiert oder was?
Mit Zitat antworten
  #8 (permalink)  
Alt 22-11-2004, 10:53
kari_w
 Guest
kari_w
Beiträge: n/a
Standard

Hmm

sorry ich weiss das ich etwas kompliziert beschreibe. Er soll die Abfrage IMMER machen auch wenn kein wert in e1 ist. Das Problem zusätzlich ist anhal das er bei der WHERE ja trotzdem die werte von e1 benötigt bez einfach als nichts oder 0 behandeln soll das die ">" passen.

Gibt es da eine möglichkeit zu?

Sorry nochmals

Gruss

kari_w
Mit Zitat antworten
  #9 (permalink)  
Alt 22-11-2004, 11:46
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

komplizierte Formulierung hast du
bedeutet denn, dass, wenn einer der 3 Bedingungen zu trifft, soll Daten geliefert werden sollen, oder was?
Mit Zitat antworten
  #10 (permalink)  
Alt 22-11-2004, 15:12
kari_w
 Guest
kari_w
Beiträge: n/a
Standard

Hallo asp2php

Ja ich weiss tut mir auch leid Habe es nicht so mit dem erklären
Wenn du den ganzen Code anschaust siehst du die Bedingung in der zweiten Abfrage. Jedoch wrden es dann soviele.
Also wenn folgendes zutrifft, dann soll er liefern:

c.cid>e.aid OR c.cid>e.bid
Und hier ist das Problem es muss auch zu treffen wenn e1 keinen eintrag hat. weil dann ist c.cid grösser als e.aid und als e.bid (da da ja kein ert existiert in e1)

Gruss

kari_w
Mit Zitat antworten
  #11 (permalink)  
Alt 22-11-2004, 15:14
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

führe deinen LEFT JOIN mal in phpmyadmin aus, was kommt da bei e.aid raus, wenn er nichts findet?
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #12 (permalink)  
Alt 22-11-2004, 15:26
kari_w
 Guest
kari_w
Beiträge: n/a
Standard

Er liest mir alle ein. Und da wo es kein eintrag in e1 gibt schreibt er mir einfach NULL rein.

Gruss

kari_w
Mit Zitat antworten
  #13 (permalink)  
Alt 22-11-2004, 15:32
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

wenn du die datensätze bekommst, wo in e.aid nichts steht, dann scheint c.cid > e.aid doch zu funktionieren?
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #14 (permalink)  
Alt 22-11-2004, 15:33
kari_w
 Guest
kari_w
Beiträge: n/a
Standard

Sorry ich kann nicht editieren.

Hate die falsche Abfrage. Er zeigt mir nichts an. Aber anhand der Fehlerhaften anzeige von vorhin nehme ich an er schaf es einfach nicht die vergleichung wenn er kein wert hat also wenn NULL drin steht. Nur die frage ist ist es denn möglich das es funktioniert?

gruss

kari_w
Mit Zitat antworten
  #15 (permalink)  
Alt 22-11-2004, 15:35
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

WHERE e.aid IS NULL OR c.cid > e.aid OR c.cid > e.bid

probier das mal
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
Antwort

Lesezeichen


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

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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

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