Hey, Heren.

ik probeer een query te schrijven wat alle rijen uit een tabel haalt waar een kolom uniek is maar er word gekeken naar een andere column als voorkeur.

dus bijvoorbeeld ik heb 4 rijen waar 1 daarvan niet uniek is maar de taal engels heeft.

de bedoeling is als ik alle kolomen ophaal dat ik dan alle Engelse kolomen krijg maar zodra die niet bestaat hij de zelfde rij pakt in een andere taal opgegeven taal.

iemand enig idee hoe ik dit voor elkaar krijg?
Ja dat kan zeer zeker, maar je vraagstelling is erg abstract. Kun je een beschrijving van je tabel geven en een voorbeeld van wat je als output verwacht?
invoer:

-------------------------------------------------------------
|1 | title | nl | | |
-------------------------------------------------------------
|2 | title | nl | | |
-------------------------------------------------------------
|3 | title | nl | | |
-------------------------------------------------------------
|3 | title | en | | |
-------------------------------------------------------------
|4 | title | nl | | |
-------------------------------------------------------------
|4 | title | be | | |
-------------------------------------------------------------


Wat ik nodig heb als ik het liefst de taal EN wil maar de standaard taal is NL:


-------------------------------------------------------------
|1 | title | nl | | |
-------------------------------------------------------------
|2 | title | nl | | |
-------------------------------------------------------------
|3 | title | en | | |
-------------------------------------------------------------
|4 | title | nl | | |
-------------------------------------------------------------
Je zou het met order by kunnen doen zat ik te denken maar dan moet 'nl' misschien '_nl' worden zodat deze bovenin komt te staan in de alfabetische volgorde...

<?php

$t = 'en';
$id = 2;

$qry = "SELECT * FROM tabelnaam WHERE id=$id AND (taal='$t' OR taal='nl') ORDER BY '$t'";

?>
dat is totaal niet wat ik bedoel.

ik heb unieke rijen nodig waar bij een voorkeur taal is aangegeven en als die niet bestaat terug valt op de standaard taal.

Ik neem aan dat die id's uit een andere tabel komen?
Dan kan je met een LEFT JOIN en COALESCE dat bereiken:

SELECT
	i.item_date,
	COALESCE(en.title, nl.title) AS title
FROM
	items AS i
LEFT JOIN
	details AS en
	ON
		i.item_id = en.item_id
	AND
		en.lang_id = 'en'
LEFT JOIN
	details AS nl
	ON
		i.item_id = nl.item_id
	AND
		nl.lang_id = 'nl'
WHERE
	i.item_date => CURRENT_DATE()

met COALESCE wordt en.title geslecteerd als deze niet leeg is, anders nl.title
Hey ger,

dit is inderdaad de goede richting op, maar er wordt nog wat meer info bij iedere rij opgeslagen.
dus ik heb niet alleen de title nodig maar eigenlijk de hele rij.
Is de gehele rij taal afhankelijk? Je kunt die COALESCE op elke kolom toepassen.
Ik weet het lijkt omslachtig, maar het is eigenlijk op de manier zoals het nu is, de enige nog redelijk simpele oplossing.

[edit]
Ik denk nog steeds sneller dan dat ik type (gelukkig maar, want dat gaat niet zo snel)
[/edit]

Reageren