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 Thema bewerten
  #1 (permalink)  
Alt 04-01-2013, 04:37
powermax
 Registrierter Benutzer
Links : Onlinestatus : powermax ist offline
Registriert seit: Apr 2006
Ort: Deutschland / Hessen / Hanau
Beiträge: 38
powermax ist zur Zeit noch ein unbeschriebenes Blatt
Exclamation SQL - JOIN mit WHERE primärschlüssel

Guten Morgen,

konnte jetzt nichts passendes finden zu diesem Thema, welches mein Problem in der für mich verständlichen Form gelöst hätte, finden. Daher erstelle ich mal fix ein neues Thema =) Hoffe das stört niemanden.


Und zwar.

Bastle gerade mal eine Art Ticketsystem, wo ich mit verschiedenen Tabellen zusammenarbeite. Dieses Problem betrifft 2 Tabellen, die mit JOIN verarbeitet werden.

Im Prinzip habe ich "Nachrichten" von "Konversationen" getrennt. Identifiziert werden sie durch die "conversation_id" die in beiden Tabellen vorkommt.
Nun habe ich folgende SQL-Abfrage erstellt (müsste soweit an sich richtig sein):
PHP-Code:
mysql_query('SELECT conversations_info.*, conversations.* FROM conversations_info RIGHT JOIN conversations ON conversations_info.conversation_id = conversations.conversation_id WHERE conversation_id = '.$cid.' ORDER BY actualdate DESC'); 
erhalte diesen Fehler:
Zitat:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in conversations.php on line 214

Die Problematische Stelle konnte ich bereits lokalisieren: es muss an der WHERE Bedingung liegen, dass es nicht funktioniert. Also dem WHERE = conversation_id = '.$cid.' ...

Daher die Frage kann man den gemeinsamen "Faktor" beider Tabellen nicht als WHERE Bedingung nutzen? Wenn doch, wo liegt mein Fehler oder gibt es logische also strukturelle Alternativen für die Umsetzung?

Für Hilfe danke ich Euch sehr.

Grüße
Mit Zitat antworten
  #2 (permalink)  
Alt 04-01-2013, 08:27
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

ich tippe darauf, dass mysql_error() dir irgendetwas mit ambiguous column melden würde, wenn du es aufrufen würdest.

Wenn ein Spaltenname in mehr als einer Tabelle vorkommt, musst du den Tabellennamen mit angeben, um MySQL mitzuteilen, welche Spalte du meinst.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 04-01-2013, 15:59
powermax
 Registrierter Benutzer
Links : Onlinestatus : powermax ist offline
Registriert seit: Apr 2006
Ort: Deutschland / Hessen / Hanau
Beiträge: 38
powermax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, in der Tat, es kommt ein Fehler:

Zitat:
Column conversation_id in on clause is ambiguous
Was mir sagt, dass conversation_id mehrdeutig ist, liegt es am "gleichen" namen?

weil exakt dieser right join funktioniert mit konversationen und benutzern (wo die beiden primärschlüssel id und user_id heißen) und es nach conversation_id geordnet wird..
Mit Zitat antworten
  #4 (permalink)  
Alt 04-01-2013, 17:15
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von powermax Beitrag anzeigen
liegt es am "gleichen" namen?
Natürlich, woran sollte es sonst liegen? Ich hatte dir ja schon geschrieben, was du tun kannst. Hast du es jetzt hinbekommen?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 04-01-2013, 18:27
powermax
 Registrierter Benutzer
Links : Onlinestatus : powermax ist offline
Registriert seit: Apr 2006
Ort: Deutschland / Hessen / Hanau
Beiträge: 38
powermax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

okay das problem wäre gelöst, vielen Dank für den Tipp! Habe noch ein ähnliches, Problem mit 3 Tabellen, die mit Join verbunden werden sollen.

Erhalte mit folgender SQL-Abfrage einen "Not unique table/alias: 'conversations'" Fehler:

PHP-Code:
$result mysql_query('SELECT clients.*, conversations.*, conversations_info.* FROM clients RIGHT JOIN conversations ON clients.id = conversations.user_id RIGHT JOIN conversations ON conversations.conversation_id = conversations_info.conversation_id WHERE conversations_info.closed = "0" GROUP BY conversations_info.conversation_id ORDER BY conversations.actualdate DESC ') or die(mysql_error());; 
Der Fehler meint so wie ich es verstehe, dass eine Tabelle nicht bzw. nicht mehr einzigartig ist - interpretation: weil sie 2x in einem Join vorkommt oder wie kann ich diese Fehlermeldung verstehen?

=)

UPDATE:

habe etwas mit der Formulierung gespielt und nach Lösungswegen gesucht - leider ohne besseres Ergebnis, außer das mysql_error hier nichts ausgibt sondern wieder das übliche

"Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in"

auftaucht. Was ja nicht sehr hilfreich ist.

hier erstmal der Code, der auch jetzt etwas übersichtlicher ist:

PHP-Code:
$result = ('
                            SELECT 
                                clients.*, 
                                conversations.*, 
                                conversations_info.* 
                            FROM 
                                clients AS DB1 
                            INNER JOIN 
                                conversations AS DB2 ON DB1.id = DB2.user_id 
                            INNER JOIN 
                                conversations_info AS DB3 ON DB2.conversation_id = DB3.conversation_id 
                            WHERE 
                                DB3.closed = "0" 
                            GROUP BY 
                                DB3.conversation_id 
                            ORDER BY 
                                DB2.actualdate DESC
                            
                            '
) or die(mysql_error()); 
Es gibt zwar ein schönes Sticky in diesem Unterforum aber bin mir jetzt nicht sicher ob das richtig für mein Problem ist :/
Weiß einer Rat?

Geändert von powermax (04-01-2013 um 19:08 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 04-01-2013, 19:25
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Gejoint hast du richtig (mit Aliassen), aber die Spaltenreferenzen (das zwischen SELECT und FROM) müssen ebenfalls auf die verwendeten Aliasse verweisen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 04-01-2013, 19:43
powermax
 Registrierter Benutzer
Links : Onlinestatus : powermax ist offline
Registriert seit: Apr 2006
Ort: Deutschland / Hessen / Hanau
Beiträge: 38
powermax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also einfach ein AS wie bei den joins?

PHP-Code:
SELECT clients.* AS DB1, ... 
So in etwa?
Mit Zitat antworten
  #8 (permalink)  
Alt 04-01-2013, 19:48
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Nein, aber so langsam solltest du mal überlegen, ob es nicht schneller und sinnvoller wäre, einfach SQL zu lernen, statt ewig herumzuprobieren. Wir helfen ja gerne, aber es ist einfach nicht machbar, jedem immer wieder dieselben Grundlagen vorzukauen.

Code:
SELECT db1.*, db2.*, ...
Statt der originalen Tabellennamen einfach die Aliasse verwenden, genauso wie du es bei den Joins ja auch machst, wenn du die ON-Klausel angibst.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 04-01-2013, 20:04
powermax
 Registrierter Benutzer
Links : Onlinestatus : powermax ist offline
Registriert seit: Apr 2006
Ort: Deutschland / Hessen / Hanau
Beiträge: 38
powermax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hab ich so gemacht - keine Veränderung des Fehlers.
Mit Zitat antworten
  #10 (permalink)  
Alt 04-01-2013, 20:36
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von powermax Beitrag anzeigen
hab ich so gemacht - keine Veränderung des Fehlers.
Wie lautet denn die Meldung von mysql_error()?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #11 (permalink)  
Alt 04-01-2013, 22:01
powermax
 Registrierter Benutzer
Links : Onlinestatus : powermax ist offline
Registriert seit: Apr 2006
Ort: Deutschland / Hessen / Hanau
Beiträge: 38
powermax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

das hat mich, wie ich bereits geschrieben hatte, sowieso verwundert, dass es keine mysql_error() Fehlermeldung gab, sondern wie ohne mysql_error() am Ende

Zitat:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in conversations.php on line 86
obwohl am Ende genau wie oben im Code das mysql_error() steht.
Hier noch einmal der Code so wie er bei mir in der Datei steht.

PHP-Code:
$result = ('
                            SELECT 
                                db1.*, 
                                db2.*, 
                                db3.* 
                            FROM 
                                clients AS db1 
                            INNER JOIN 
                                conversations AS db2 ON db1.id = db2.user_id 
                            INNER JOIN 
                                conversations_info AS db3 ON db2.conversation_id = db3.conversation_id 
                            WHERE 
                                db3.closed = "0" 
                            GROUP BY 
                                db3.conversation_id 
                            ORDER BY 
                                db2.actualdate DESC
                            
                            '
) or die(mysql_error()); 
Mit Zitat antworten
  #12 (permalink)  
Alt 04-01-2013, 23:06
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Und wo ist das mysql_query hin? Klar kannst du aus $result keine Datensätze abrufen, denn es ist nur der String mit dem Statement drin. Zwischen »$result = « und »('« sollte noch »mysql_query« dastehen, meinst du nicht auch?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #13 (permalink)  
Alt 04-01-2013, 23:10
powermax
 Registrierter Benutzer
Links : Onlinestatus : powermax ist offline
Registriert seit: Apr 2006
Ort: Deutschland / Hessen / Hanau
Beiträge: 38
powermax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

jetzt versinke ich total im boden. Das kommt daher, wenn man zum austauschen schnell mal code im Windows editor schreibt lol..




Danke aber für deine Hilfe! =)


PS: Es klappt^^
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[SQL allgemein] SQL JOIN - mit Abfrage über mehrere Datenbanken!! chris1980 SQL / Datenbanken 5 26-02-2008 12:57
JOIN mit NULL-Werten und WHERE-Bed. zonthor SQL / Datenbanken 5 19-06-2006 22:30
[SQL JOIN] Join mit zählen in einer anderen Tabelle tontechniker SQL / Datenbanken 1 19-05-2006 11:03
[SQL allgemein] Join über 2 Tabellen mit doppelter WHERE-Abfrage Friedward74 SQL / Datenbanken 24 23-08-2005 13:49
Problem mit UPDATE bei JOIN und WHERE-Bedingung ftd SQL / Datenbanken 1 15-03-2005 16:00

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

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:59 Uhr.