INNER JOIN Verständnisproblem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ansprechen
code
entfernen
fasse
fehler
feld
generelles faulheit
gleichen spalten
logik
machen
modeln
nase
nutzer
operation
original entsprechen
problem
spalten
steig
tabelle
url
-
Hey community :)
$sql = "SELECT * FROM goods INNER JOIN user ON goods.user_id = user.id AND needed = '0'"; $result = $db_link->query($sql); while($row = $result->fetch_assoc()){ echo $row["id"]; }
Dieser Code gibt die Nutzer-ID aus, nicht die Güter-ID .. Dabei wähle ich doch alles aus "goods" und joine die restlichen Daten nur hinzu. Da müsste doch die ID von goods eine höhere Priorität haben?
Wie löse ich dieses Problem und schaffe es, dass mit dem echo die ID der Tabelle goods und nicht die der Tabelle user ausgegeben wird?
Vielen Dank für jede Hilfe im Voraus! :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich vermute, dass es daran liegt, dass beide id Fehler id heißen.
Deine Logik stimmt. Aber wenn du andersrum denkst, wird zuerst die Güter-ID mit dem Namen id geschrieben und danach wird die id mit der Nutzer-ID überschrieben.
Es wäre vorteilhafter, wenn du die Felder anders nennst oder mit
arbeitest.as
Zum Beispiel:
SELECT *, `user`.`id` AS `user_id`, `goods`.`id` AS `good_id` FROM `goods ` INNER JOIN `user ` ON `goods`.`user_id` = `user`.`id` AND needed = '0';
Beitrag zuletzt geändert: 11.6.2013 22:56:29 von fabi755 -
fabi755 schrieb:
Ich vermute, dass es daran liegt, dass beide id Fehler id heißen.
Deine Logik stimmt. Aber wenn du andersrum denkst, wird zuerst die Güter-ID mit dem Namen id geschrieben und danach wird die id mit der Nutzer-ID überschrieben.
Es wäre vorteilhafter, wenn du die Felder anders nennst oder mit
arbeitest.as
goods.user_id != user.id SELECT * FROM goods a INNER JOIN user b ON a.user_id = b.id AND a/b.needed = '0
je nachdem wo needed ist (denke b.needed) a entfernen
oder wie bereits erwähnt mit as
Beitrag zuletzt geändert: 11.6.2013 23:01:23 von n0tiert -
fabi755 schrieb:
Ich vermute, dass es daran liegt, dass beide id Fehler id heißen.
[...]
Es wäre vorteilhafter, wenn du die Felder anders nennst oder mit
arbeitest.as
Korrekt. Lag daran und AS funzt wunderbar. Vielen lieben Dank! :)
n0tiert schrieb:
goods.user_id != user.id SELECT * FROM goods a INNER JOIN user b ON a.user_id = b.id AND a/b.needed = '0
je nachdem wo needed ist (denke b.needed) a entfernen
oder wie bereits erwähnt mit as
Da steig ich nicht so ganz durch .. Ich versuch's nochmal zu verstehen wenn ich wieder aufstehe, aber AS war wie gesagt richtig. Also auch dir vielen Dank! :) -
Mit "AS" also "als" gibst du für den Result einen anderen Spalten Name vor.
AS "Bratwurst" .... AS "Senf" usw.
das ist sofern wichtig wenn du in beiden Tables z.b. die gleichen Spalten Bezeichner hast wie "ID"
und diese im Result darstellen willst oder vergleich Operationen benötigst oder ......
wenn du dann in deinem Script nicht mit $row[0], $row[1]
(was nicht immer sinnvoll ist das sich das db model ändern kann)
arbeitest sonder die spalten namen fest sind wie "$row['username']"
müssen diese gleich dem AS sein und dürfen nicht dem original entsprechen ,
sonnst fällt dein Script auf die Nase
Bei meinem Ansatz ändere ich den Result 'username' nicht -> 'Name' ,
und kann aber trotzdem beide 'username' felder in tabelle 'a" und 'b' ansprechen.
select a.id , a.username, b.username , c.id ..... FROM tabelle a , tabelle b, tabelle c WHERE a.username = b.username AND a.id = c.id
Es muss nicht immer ein "Join" sein
select * ist zwar nice aber brauch ich immer alles ?
muss ich den mit "Select *" username aus"a" und "b" AS "usrname" doppelt haben ?
und fasse die $row['usrname'] im Script dann gar nicht erst an ?
ein generelles Faulheit´s Problem
beim testen OK, nur später in Produktion sollten nur die spalten abgefragt
werden die ich auch nur benötige......
macht das ganze schlanker und performanter ...
Beitrag zuletzt geändert: 15.6.2013 9:40:28 von n0tiert -
Okay, danke .. Werde ich fortan beachten :)
Hoffe ja immernoch, dass meine Projekte groß werden und dann ist Performance wirklich relevant.
Aber Joins finde ich dann doch irgendwie ganz gut ^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage