Hallo,
Meine Datenbankstruktur sieht so aus ( Ausschnitt ):
CREATE TABLE `aw_nachricht` (
`id` bigint(20) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`abs_id` int(11) NOT NULL,
`abs_name` varchar(255) collate latin1_general_ci NOT NULL,
`betreff` varchar(1024) collate latin1_general_ci NOT NULL,
`nachricht` text collate latin1_general_ci NOT NULL,
`postfach` smallint(6) NOT NULL,
`datum` bigint(20) NOT NULL,
`gelesen` smallint(6) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`,`abs_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
CREATE TABLE `aw_user` (
`id` int(10) unsigned NOT NULL auto_increment,
`benutzername` varchar(255) collate latin1_general_ci NOT NULL default '',
.....
}
Ich suche nun einen Query, der mir so in der art SELECT * FROM aw_nachrichten WHERE 1 die Datensätze gibt, allerding soll er, wenn die ID nicht 0 ist das Feld benutzername aus aw_user laden. Wenn ID 0 ist, dann soll er dies nicht machen, da ich dann den benutzernamen aus aw_nachrichten verwenden möchte.
Weiß jemand, ob sowas in einem Query geht?
Vielen Dank
MySql Query mit Join gesucht
gepostet vor 18 Jahre, 1 Monat von Freshman
gepostet vor 18 Jahre, 1 Monat von TheUndeadable
Schau dir mal LEFT JOIN an
gepostet vor 18 Jahre, 1 Monat von Itchy
Mit dem LEFT JOIN ginge das zwar, allerdings mußt Du dann im Skript immer noch parsen, ob die ID 0 ist oder nicht und darüber entscheiden, welcher Name zu benutzen ist.
Mein Vorschlag wäre:
SELECT * FROM aw_nachricht WHERE user_id NOT IN (SELECT id FROM aw_user)
UNION
SELECT aw_nachricht.id, aw_nachricht.user_id [...], aw_user.benutzername [...] awnachricht.betreff [...] FROM aw_nachricht, aw_user WHERE aw_nachricht.user_id = awuser.id AND aw_nachricht.user_id IN (SELECT id FROM aw_user)
Damit erhälst Du ein homogenes Resultset, das Du ohne weitere Intelligenz im Skript ausgeben kannst.
Mein Vorschlag wäre:
SELECT * FROM aw_nachricht WHERE user_id NOT IN (SELECT id FROM aw_user)
UNION
SELECT aw_nachricht.id, aw_nachricht.user_id [...], aw_user.benutzername [...] awnachricht.betreff [...] FROM aw_nachricht, aw_user WHERE aw_nachricht.user_id = awuser.id AND aw_nachricht.user_id IN (SELECT id FROM aw_user)
Damit erhälst Du ein homogenes Resultset, das Du ohne weitere Intelligenz im Skript ausgeben kannst.
gepostet vor 18 Jahre, 1 Monat von Störti
SELECT * FROM aw_nachrichten
LEFT JOIN aw_user ON ( aw_nachrichten.abs_id
0 AND aw.nachrichten.abs_id = aw_user.id )
Ob 3 Selects in einer Abfrage so effektiv sind, mag ich bezweifeln...
LEFT JOIN aw_user ON ( aw_nachrichten.abs_id
0 AND aw.nachrichten.abs_id = aw_user.id )
Ob 3 Selects in einer Abfrage so effektiv sind, mag ich bezweifeln...
gepostet vor 18 Jahre, 1 Monat von Itchy
Wie gesagt, kommt drauf an.
Machst Du das nur mit dem JOIN, mußt Du im Skript irgendwas in der Art drinstehen haben:
$name = $row['abs_name'];
else
$name = $row['benutzername'];
Ob das effektiv ist, mag ich bezweifeln.
Machst Du das nur mit dem JOIN, mußt Du im Skript irgendwas in der Art drinstehen haben:
if ( $row['benutzername'] == '' )
$name = $row['abs_name'];
else
$name = $row['benutzername'];
Ob das effektiv ist, mag ich bezweifeln.
gepostet vor 18 Jahre, 1 Monat von Störti
SELECT aw_nachrichten.*, IF(aw_user.benutzername IS NULL,aw_nachrichten.abs_name,aw_user.benutzername) AS absendername FROM aw_nachrichten
LEFT JOIN aw_user ON ( aw_nachrichten.abs_id
0 AND aw_nachrichten.abs_id = aw_user.id )
Besser?
LEFT JOIN aw_user ON ( aw_nachrichten.abs_id
0 AND aw_nachrichten.abs_id = aw_user.id )
Besser?
gepostet vor 18 Jahre, 1 Monat von Itchy
Wenn das funktioniert, ja
Die Möglichkeit von IF Strukturen innerhalb einer SQL Abfrage waren mir noch gar nicht bekannt.
Die Möglichkeit von IF Strukturen innerhalb einer SQL Abfrage waren mir noch gar nicht bekannt.
gepostet vor 18 Jahre, 1 Monat von Freshman
Vielen dank für die Antworten.
Das mit dem IF wußte ich garnicht.
Funktioniert genau so wie ich es wollte. Da wäre ich nie drauf gekommen.
mfg
Holger
Das mit dem IF wußte ich garnicht.
Funktioniert genau so wie ich es wollte. Da wäre ich nie drauf gekommen.
mfg
Holger
gepostet vor 18 Jahre, 1 Monat von Störti
Man lernt nie aus...