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 09-09-2008, 14:04
callt
 Member
Links : Onlinestatus : callt ist offline
Registriert seit: Aug 2002
Beiträge: 165
callt ist zur Zeit noch ein unbeschriebenes Blatt
Standard LEFT JOIN und LIMIT

Hallo Leute,

Ich habe zwei Tabellen user und user_vars.

CREATE TABLE `user` (
`id` int(14) NOT NULL auto_increment,
`user` varchar(255) NOT NULL,
`firstname` varchar(100) NOT NULL,
`lastname` varchar(100) NOT NULL,
);

CREATE TABLE `user_vars` (
`user_id` int(14) NOT NULL,
`varname` varchar(100) NOT NULL,
`text` text NOT NULL,
)


Ich möchte ein limit von zwei usern aus user.

aus der user_vars möchte ich drei zu den usern gehörige attribute rausfischen (country, zodiac, gender). das sind aber keine felder, sondern varname = 'country', text = 'germany' usw.

Es besteht die möglichkeit, das user1 keinen eintrag zu country hat, der andere keinen zu zodiac oder beides usw.

jetzt hatte ich die idee ein limit auf zwei mal drei zu setzen.

also zwei user will ich haben mal drei attributen = 6

meine abfrage:


SELECT user.id, user, firstname, lastname, (
IF( varname = 'country', text, '' )
) AS country, (
IF( varname = 'gender', text, '' )
) AS gender, (
IF( varname = 'zodiac', text, '' )
) AS zodiac
FROM user
LEFT JOIN user_vars ON user_id = user.id
LIMIT 6

problem. wenn einem user der eintrag für country fehlt bekomme ich drei user zurück, weil der left join kein limit kennt.

ich hoffe meine frage einigermaßen verständlich ausgedrückt zu haben.

hat jemand einen tip?
Mit Zitat antworten
  #2 (permalink)  
Alt 09-09-2008, 14:07
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich habs nicht ganz verstanden, aber Du könntest Deine tabelle 3 mal joinen, ist zwar komischim Design, könnte aber Dein Problem lösen
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
Mit Zitat antworten
  #3 (permalink)  
Alt 09-09-2008, 14:08
callt
 Member
Links : Onlinestatus : callt ist offline
Registriert seit: Aug 2002
Beiträge: 165
callt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

werd ich mal versuchen
Mit Zitat antworten
  #4 (permalink)  
Alt 09-09-2008, 14:10
callt
 Member
Links : Onlinestatus : callt ist offline
Registriert seit: Aug 2002
Beiträge: 165
callt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

da bekomme ich als fehler
#1066 - Not unique table/alias: 'user_vars'
Mit Zitat antworten
  #5 (permalink)  
Alt 09-09-2008, 14:13
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ja dann musst Du deinen tabellen aliase geben
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
Mit Zitat antworten
  #6 (permalink)  
Alt 09-09-2008, 14:16
callt
 Member
Links : Onlinestatus : callt ist offline
Registriert seit: Aug 2002
Beiträge: 165
callt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

so gehts


SELECT user.id, user, firstname, lastname, (
IF( ta.varname = 'country', ta.text, '' )
) AS country, (
IF( tb.varname = 'gender', tb.text, '' )
) AS gender, (
IF( tc.varname = 'zodiac', tc.text, '' )
) AS zodiac
FROM user
LEFT JOIN user_vars AS ta ON ta.user_id = user.id AND ta.varname = 'country'
LEFT JOIN user_vars AS tb ON tb.user_id = user.id AND tb.varname = 'gender'
LEFT JOIN user_vars AS tc ON tc.user_id = user.id AND tc.varname = 'zodiac'
LIMIT 3

ist irgendwie komisch, aber auch nicht übel

danke dir.

vielleicht gibt es aber noch einen anderen weg?
Mit Zitat antworten
  #7 (permalink)  
Alt 09-09-2008, 14:41
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

evt kannst Du die ganzen IF weg lassen, da der left join sowieso null zurück gibt.
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
Mit Zitat antworten
  #8 (permalink)  
Alt 09-09-2008, 14:51
callt
 Member
Links : Onlinestatus : callt ist offline
Registriert seit: Aug 2002
Beiträge: 165
callt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

nein ich möchte die varname-values von der user_vars als row->namen ausgegeben bekommen
Mit Zitat antworten
  #9 (permalink)  
Alt 09-09-2008, 14:54
callt
 Member
Links : Onlinestatus : callt ist offline
Registriert seit: Aug 2002
Beiträge: 165
callt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

nein ich möchte die varname-values von der user_vars als row->namen ausgegeben bekommen.

also in der tabelle user_vars steht

varname='country' IST text='germany'
ich möchte im datensatz aber country = 'germany' zurückhaben

ear aber ne coole idee mit den drein left joins

Geändert von callt (09-09-2008 um 14:57 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 09-09-2008, 15:14
callt
 Member
Links : Onlinestatus : callt ist offline
Registriert seit: Aug 2002
Beiträge: 165
callt ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ach mensch ich kann die ifs ja doch weglassen


SELECT user.id, user, firstname, lastname,
ta.text AS country,
tb.text AS gender,
tc.text AS zodiac
FROM user
LEFT JOIN user_vars AS ta ON ta.user_id = user.id AND ta.varname = 'country'
LEFT JOIN user_vars AS tb ON tb.user_id = user.id AND tb.varname = 'gender'
LEFT JOIN user_vars AS tc ON tc.user_id = user.id AND tc.varname = 'zodiac'
LIMIT 3

Geändert von callt (09-09-2008 um 15:20 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 10-09-2008, 08:01
MelloPie
 PHP Master
Links : Onlinestatus : MelloPie ist offline
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
MelloPie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

sag ich doch :-P
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
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

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
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:57 Uhr.