Daten ausschliessen
Ilja
- datenbank
0 Cheatah
hi,
ich habe eine knifflige situation mit einer mysql abfrage. es existieren 2 tabellen. die erste tabelle SKILLS besteht aus einer id nummer (id) und den namen der skills (name). die zweite tabelle USER_SKILLS hat drei spalten, idnummer für den user (user_id), eine idnummer für den skill den er hat (skill_id) und die dritte spalte ist der wert für ein skill (value).
ich habe es nun geschaft. alle skills mit seinen werten zu finden, die ein bestimmer user besitzt mit folgender abfrage, wobei $id die user id ist, die aus einer anderen tabelle schon vorher ausgelesen wurde und hier nicht weiter interessieren soll:
SELECT name, value, skill_id FROM skills, user_skills WHERE user_id = $id AND id=skill_id
die zweite abfrage soll nun alle skills ausgeben, die ein bestimmer user ($id) noch nicht besitzt und dann fing mein problem an. habe noch nicht die richtige abfrage gefunden.
ich habe ein paar abfragen schon versucht, unter anderem folgende, die aber nur zu einem mysql error führt:
SELECT name FROM skills WHERE id NOT EXISTS (SELECT skill_id FROM user_skills WHERE character_id = $id)
ok, ich bin am ende mit meinem latein und gehe erst mal zigaretten holen, inder hoffnung, jemand kann mir weiterhefen.
Ilja
Hi,
SELECT name, value, skill_id FROM skills, user_skills WHERE user_id = $id AND id=skill_id
es ist wartungsfreundlicher und u.U. auch fehlervermeidend, _jeder_ Spalte (mindestens bei Joins) den Tabellennamen hinzuzufügen: SELECT skills.name, user_skills.value, ...
die zweite abfrage soll nun alle skills ausgeben, die ein bestimmer user ($id) noch nicht besitzt und dann fing mein problem an. habe noch nicht die richtige abfrage gefunden.
SELECT id FROM skills
MINUS
SELECT skill_id FROM user_skills WHERE user_id=$id
Oder so ähnlich. Mehr dazu in der MySQL-Doku.
ich habe ein paar abfragen schon versucht, unter anderem folgende, die aber nur zu einem mysql error führt:
"Ein Fehler" hilft keinem Menschen. Zu einer Fehlerbeschreibung gehört mindestens, aber nicht höchstens, die Fehlermeldung.
Cheatah