Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Join Problem [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Join Problem


 
JogiWebster
03-10-2003, 17:39 
 
Hallo,

ich möchte folgende Afragen kombinieren:


$result = mysql_query("SELECT DISTINCT spalte1 $tabelle1");
$anzahl = mysql_num_rows($result);
while($i_1 < $anzahl)
{
$i_1++;
$row = mysql_fetch_array($result);


}
?>

 
Abraxax
03-10-2003, 17:49 
 
welche abfragen?

 
JogiWebster
03-10-2003, 18:00 
 
Hallo,

ich möchte folgende Afragen kombinieren:

$result = mysql_query("SELECT DISTINCT spalte1 $tabelle1");
$anzahl = mysql_num_rows($result);
while($i < $anzahl)
{
$i++;
$row = mysql_fetch_array($result);
$string1 = $row[spalte1];

$result = mysql_query("SELECT * FROM $tabelle2 WHERE spalte1 = '$string1' AND spalte2 = 'x' ");
$anzahl = mysql_num_rows($result);
if ($anzahl != 0) echo "Nicht vorhanden";
}

In eigenen Worten:
Ich möchte die Zeile der ersten Tabelle nur selektieren, wenn der Wert aus der ersten Spalte der ersten Tabelle ebenfalls in der zweiten Tabelle auftaucht und dann noch der Wert "x" in der gleichen Zeile der zweiten Tabelle in der zweiten Spalte gefunden wird.
Also etwa so:

Tabelle1:
id | spalte1
--------------
1 | apfel
2 | apfel
3 | birne

Tabelle2:
id | spalte1 | spalte2
--------------------------
1 | apfel | x
2 | apfel |
3 | birne | x

Hier soll eben nur die Zeile mit der id 1 aus der Tabelle1 ausgeben werden.

Das müßte doch auch einfacher gehen, z.B. per JOIN oder?
Wie müßte ich das Join einsetzen?

Danke!

Jogi

 
JogiWebster
03-10-2003, 18:01 
 
sorry, bitte thread löschen, war versehentlich auf ENTER gekommen...
habs nochmal zuende formuliert danke!

 
Abraxax
03-10-2003, 19:23 
 
Original geschrieben von JogiWebster
sorry, bitte thread löschen, war versehentlich auf ENTER gekommen...
habs nochmal zuende formuliert danke! nö. hier wird ncihts gelöscht.

und du kannst auch deien frage hier stellen und keinen neuen thread dafür aufmachen. :teach:

*ZUSAMMENFÜHR*

 
Abraxax
03-10-2003, 19:26 
 
SELECT
T1.spalte1
FROM
tabelle1 T1
LEFT JOIN tabelle2 T2 USING(id)
WHERE
T2.spalte2 = 'x'

bei deinem derzeitigen tabelleninhalt würde ich aber mal sagen, dass du die beiden tabellen gar nicht brauchst. tabelle1 ist ja bereits in tabelle2 in den ersten beiden spalten 1:1 enthalten.

 
JogiWebster
03-10-2003, 21:04 
 
Danke für die Antworten!

Die Tabellen sind doch etwas komplexer als hier dargestellt, deshalb habe ich hier nur die wesentlichen Bestandteile angegeben.

Aber noch eine Frage:
Wie gestalte ich eine ganze einfahc Abfrage über zwei tabellen in einem Select
z.B. Ist String1 in Tabelle1 und String2 in Tabelle2 vorhanden?

Danke!
Jogi

 
Abraxax
03-10-2003, 21:46 
 
schaue dir mein beispiel an. :teach:

und noch was. verknüpfungen macht man normalerweise nur über id's aber niemals mit strings.

 
JogiWebster
03-10-2003, 22:39 
 
ok, dann ist JOIN doch für meine letztere Frage garnicht der richtige Ansatzpunkt oder?
Danke Dir!

 
Abraxax
04-10-2003, 11:06 
 
du kannst nur mit JOIN tabellen verbinden. anders geht es nicht.

aber schaue dir doch mal deine tabellen an. da musst du ansetzen. deine daten müssen mal 'vernünftig' strukturiert sein.

 
JogiWebster
05-10-2003, 16:47 
 
ok, dann nochmal anders gefragt:

Kann ich JOIN überhaupt nutzen, wenn die beiden Tabellen unterschiedlich viele Zeilen haben?

Kann ich mit JOIN abfragen, ob ein bestimmter STRING in beiden Tabellen vorkommt bzw. die Zeilen verbinden, in denen der gleiche String auftaucht?

Mein Problem ist nämlich, das keine id definiert ist, über die ich eine Zugehörigkeit herstellen könnte.

Gruß

Jogi

 
Abraxax
05-10-2003, 18:58 
 
klar kannst du auch tabellen verbinden, bei denen unterschiedlich viele DS's drin sind. wo ist das problem, dass du das einfach mal selbstständig testest?

 
JogiWebster
05-10-2003, 20:04 
 
Hey Abraxax,
nichts für ungut, aber ich habe hier zwei PHP4/mySQL Bücher vor mir liegen und habe die mySQL Doc und das Forum schon ordentlich durchforstet.
Dabei bin ich schon einige Tage am probieren, also bitte nimm mir meine "Anfänger" Fragen nicht übel.

Meine Hauptfrage war eigentlich auch eher:
Kann ich mit JOIN abfragen, ob ein bestimmter STRING in beiden Tabellen vorkommt bzw. die Zeilen verbinden, in denen der gleiche String auftaucht?
Ich kann dabei keine id`s verwenden, weil die Id`s der Tabellen in keiner Bezihung zueinander stehen.

Eigentlich möchte ich nur wissen, ob ein in Tabelle1.Spalte1 gefundener String auch irgendwo in der Tabelle2 auftaucht.
Wenn diese Bedingung erfüllt ist, dann muss zusätzlich noch gegeben sein, dass in der entsprechenden Zeile der Tabelle2 in der Spalte2 "x" steht.

Ich habe jetzt mal folgendes probiert (ohne Join):
$result = mysql_query("SELECT tabelle1.spalteX, tabelle2.spalteY FROM tabelle1, tabelle2 WHERE tabelle1.spalteX = tabelle2.spalteY");

Das drückt zumindest aus, was ich abfragen möchtre, nur leider bekomme ich nichts ausgegeben, aber auch keinen Fehler.

Vielleicht könnt Ihr mir sagen ob ich da auf dem Holzweg bin?

Vielen Dank!

 
mrhappiness
05-10-2003, 20:09 
 
sicher, dass es datensätze gibt, die diese bedingung erfüllen?

 
JogiWebster
05-10-2003, 20:23 
 
Alles ok!
Es gab tatsächlich keine entsprechenden Datensätze, jetzt funktioniert es eben ohne JOIN.

Vielen Dank für Eure Hilfe, ohne Eure Antworten würde ich sicher immernoch am JOIN rumdoktern...

Jogi

 
Abraxax
05-10-2003, 20:47 
 
Original geschrieben von JogiWebster
Dabei bin ich schon einige Tage am probieren, also bitte nimm mir meine "Anfänger" Fragen nicht übel. das war auch nicht mein problem. ich habe ja nichts geben anfänger..... nur, wenn ich ein beispiel auf id-basis poste, kannst du sowas ja auch selbstständig mal mit strings testen. so war das gemeint.

 
JogiWebster
05-10-2003, 20:55 
 
ok, hatte ich dann falsch verstanden...
Dein Beispiel mit den ID´s hatte ich mit STRINGS getestet und das ging eben nicht, hätte ich vielleicht schreiben sollen :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:52 Uhr.