Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) join, mysql, php, rekursiv (edit)
 
Reply to this topicStart new topicStart Poll
> mysql & JOIN
pangu
Geschrieben am: Do 4.08.2005, 13:21
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 834
Mitglied seit: 29.07.2005


habe folgendes rekursives abfrageschema:
QUOTE

include('var.inc.php');

$abfrage = "SELECT a, b FROM tabelle1 WHERE punkte>0 AND aktiv='1'";
$ergebnis = mysql_query($abfrage);
if($ergebnis){
while($daten = mysql_fetch_object($ergebnis))
{
$a = $daten->a;
$b = $daten->b;


$abfrage2 = "SELECT c FROM tabelle2 WHERE x='$x'";
$ergebnis2 = mysql_query($abfrage2);
if($ergebnis2){
while($daten2 = mysql_fetch_object($ergebnis2))
{$punkte = $daten2->punkte;}}
if ($punkte > 0)
{
$a[]=$a; //daten aus tabelle1
$b[]=$b;
$anzahl++;
}

if ($anzahl>3) //es wurden genügend treffer gefunden
{break;} //abfrage beenden
}//end while
}//end if

mysql_close($verbindung);

(zusammengefasst:
ich möchte aus der tabelle a daten auslesen aber nur wenn in der tabelle b (userdaten) genügend punkte vorhanden sind.)

->hab mir sagen lassen, das das mit >JOIN< viel effizienter gehen soll,
nur kapier ich nicht ganz we das geht. kann mir jmd. helfen? thx


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
 
pangu
#2 Geschrieben am: Do 4.08.2005, 20:41 (+07:19)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 834
Mitglied seit: 29.07.2005


habe es jetzt so gelöst:

CODE

$abfrage = "SELECT a.* FROM tabelle1 AS a, tabelle2 AS b WHERE punkte>0 AND aktiv='1' LIMIT 5";
$ergebnis = mysql_query($abfrage);
if($ergebnis){
while($daten = mysql_fetch_object($ergebnis))
{
$id[] = $daten->id;

$anzahl++;
}}


echo $anzahl;
allerdings wird die schleife doppel durchlaufen (wenn ich in der datenbank z.b. 2 treffer habe, werden dies doppelt, also 4x ausgegeben.)
->was ist da falsch? blink.gif


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Joel
Enzian Media GmbH
#3 Geschrieben am: Fr 5.08.2005, 07:33 (+10:52)
Report PostQuote Post

AyomRank 7
**************

Gruppe: Member (aktiv)
Beiträge: 1436
Mitglied seit: 17.06.2004


CODE

SELECT a.* FROM tabelle1 AS a
INNER JOIN tabelle2 AS b
ON punkte>0 AND aktiv='1';


Vielleicht funktionierts ja so?

Mit diesem Statement werden alle Einträge von tabelle1 mit tabelle2 verknüpft, falls
CODE
punkte>0 AND aktiv='1'


--------------------
EagleFind.com - Die visuelle Suchmaschine
Enzian Media bietet Entwicklung von Websites, Videos und Webcam-Streaming.

Suxedoo
Top
PMUsers WebsiteICQ
Top
 
pangu
  #4 Geschrieben am: Fr 5.08.2005, 10:09 (+02:35)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 834
Mitglied seit: 29.07.2005


danke für den Vorschlag, aber damit bekomme ich genau das selbe Ergebnis.
habe jetzt mal das $anzahl++; durch $anzahl=$anzahl+.5; ersetzt und somit geht es.

nur finde ich die Lösung irgendwie "unsauber":
..oder gehört das so?
das immer wenn man zwei Tabellen gleichzeitig vergleicht, die Whileschilfe auch jeweils doppelt durchlaufen wird?


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
zmedia
#5 Geschrieben am: Fr 5.08.2005, 10:24 (+00:14)
Report PostQuote Post

AyomRank 5
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 290
Mitglied seit: 29.04.2005




--------------------
Top
PMEmail PosterUsers Website
Top
 
manuel
#6 Geschrieben am: Fr 5.08.2005, 11:41 (+01:17)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 261
Mitglied seit: 14.01.2004


x = $x ? was soll denn das bitte heissen?

du brauchst um eine tabelle abzufragen zwischen tabelle2 und tabelle1 eine beziehung.
zum beispiel eine id wie:

es gibt eine tabelle adresse dort stehen alle adressen drinne (Tabelle1)
in einer mitarbeiter tabelle stehen die adressen der mitarbeiter (tabelel2)

die beziehung zwischwen tabelle1 und tabelle2 ist also die adresseid aus der adresse tabelle.

es musst nicht unbedingt so eine beziehung sein aber der inhalt unter dem php-resource link sollte einigermaßen klar sein bevor man mit joins spielt wink.gif

damit wir für dich mit joins spielen können sollte uns klar sein was genau du machen willst. daher würde ich empfehlen nicht irgendein fiktives beispiel zu erfinden sondern wenn auch gekürzt die reale situation abbilen. dann können wir besser verstehen was du willst und dir besser helfen smile.gif
Top
PM
Top
 
pangu
#7 Geschrieben am: Fr 5.08.2005, 12:21 (+00:39)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 834
Mitglied seit: 29.07.2005


QUOTE (manuel @ Fr 5.8.2005, 11:41)
damit wir für dich mit joins spielen können sollte uns klar sein was genau du machen willst. daher würde ich empfehlen nicht irgendein fiktives beispiel zu erfinden sondern wenn auch gekürzt die reale situation abbilen. dann können wir besser verstehen was du willst und dir besser helfen smile.gif

also situation ist folgende:
ich möchte eine art bannertausch realisieren. es sollen gleichzeitig mehrere links aus der tabelle 'webseiten' per zufall ausgewählt werden. es dürfen aber nur banner eingeblendet werden, wenn der user den der banner gehört noch genügend guthaben hat (guthaben ist in der tabelle 'user gespeichert').


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
manuel
#8 Geschrieben am: Fr 5.08.2005, 20:28 (+08:06)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 261
Mitglied seit: 14.01.2004


dann wäre die abfrage irgendwie so:

CODE

SELECT
 banner.url,
 banner.bildurl,
 banner.beschreibung
FROM user
LEFT JOIN banner ON user.userid = banner.userid
WHERE user.guthaben > 0
ORDER BY RAND()
LIMIT 3



so wink.gif... diese Abfrage liefert dir 3 Banner von 3 Usern deren guthaben größer als null ist.
diese user sind zufällig. wobei der rand() (zufällige sortierung) Generator meiner Meinung nach nicht soo super funktioniert.

Jetzt könntest du einfach die 3 Banner ausgeben und fertig.
Top
PM
Top
 
pangu
  #9 Geschrieben am: Fr 5.08.2005, 21:05 (+00:37)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 834
Mitglied seit: 29.07.2005


yep, so funktioniert's perfekt. ganz vielen dank!! laugh.gif

ach ja: damit ich dabei auch was lerne: was bedeutet das >LEFT< bei left-join genau?


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
manuel
#10 Geschrieben am: Sa 6.08.2005, 12:15 (+15:10)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 261
Mitglied seit: 14.01.2004


die oben angegebene php-resource quelle sollte das aussreichend erläutern.

so ich wie ich das verstanden habe gibt es:

inner join
left outer join | right outer join

wobei das outer weg gelassen werden kann ;-)

ein inner join verbindet tabellen dort wo die ON bedingung passt. also er würde dir nur alle user geben die auch wirklich einen banner haben. aber keine user die keinen haben.

um alle user zu bekommen und für die user die banner die welche haben benutzt man einen left oder right join. diese left oder right joins nehmen ALLE zeilen von der rechten oder linken tabelle und verknüpfen mit der jeweils anderen tabelle fals vorhanden.

folglich wäre hier auch ein inner join völlig ausreichend. der left join wurde nur aus gewohnheit gewählt wink.gif
Top
PM
Top
 
pangu
#11 Geschrieben am: Sa 6.08.2005, 13:06 (+00:50)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 834
Mitglied seit: 29.07.2005


ok, thx


--------------------
Jonglieren lernen nette Community rund ums Jonglieren °°°
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/7977

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
PHP/MySQL Entwickler für Projekt gesucht BigRed 63 0 Fr 5.09.2008, 12:05
[MYSQL] ø bei Suche nach o finden MarkusH 99 1 Mi 20.08.2008, 09:10
Suche PHP/MYSQL Programmierer Paidunion 143 0 So 17.08.2008, 12:56
Suche kleinere Jobs (HTML, PHP, MySQL...) Oliver Pester 243 2 Do 14.08.2008, 14:08
Diskussion: Login-Skript mit Sessions, PHP und ... Ayom-Team 163 2 Mo 11.08.2008, 03:33
MySQL Abfrage von einer Tabelle webdoktor 402 19 Sa 9.08.2008, 17:45
MySQL Datenbankoptimierung Coach 185 4 Do 7.08.2008, 05:47
(S) Programmierer PHP MySQL Dachs 97 0 Mo 4.08.2008, 20:48
MySQL Abfrage von zwei Tabellen webdoktor 165 6 Do 31.07.2008, 15:26
MySQL Benutzernamen Coach 152 4 Fr 25.07.2008, 21:53




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen


[Interessiert an einer Anzeige?]