Simpele sql vraag

Status
Niet open voor verdere reacties.

alinden

Nieuwe gebruiker
Lid geworden
17 jun 2013
Berichten
4
Hallo,

Ik heb een tabel met als eerste veld een id en overige velden met kenmerken. Bijvoorbeeld:

id | kleur | lengte | jaar | land | naam
---------------------------------------------------
3 | blauw | lang | 1988 | Nederland | Jan
4 | geel | kort ..etc.

Nu wil ik graag een nieuwe tabel maken met op iedere rij als eerste veld een id uit mijn andere tabel daarna een veld met de kolomnaam uit mijn eerste tabel en als derde de waarde van die kolom uit mijn eerste tabel. Dus vanuit de eerste tabel:

3 | kleur | blauw
3 | lengte | lang
3 | jaar | 1988
3 | land | Nederland
3 | naam | Jan
4 | kleur | geel
4 | lengte | kort
etc.

Heeft iemand hier een oplossing voor?

Dank en groeten, Ali.
 
En dat vind jij een simpele SQL vraaag? Dan hoop ik dat je nooit een ingewikkelde vraag gaat stellen :).
Dit is volgens mij namelijk onmogelijk in SQL; in een database query bevraag je de database op basis van records, en je output is ook op basis van die records. Wat jij wilt is een typische Spreadsheet truc: transponeren van een tabel. Dus rijen en kolommen omwisselen.

Dat zou ik nog wel kunnen door de handel te programmeren, maar dat kan dus niet met een simpele query.
 
Voor mij is het al snel ingewikkeld :)

Ik hoop(te) er op dat er iets te verzinnen is icm het statement 'DESCRIBE' van de tabelnaam..
 
@OctaFish: het is wel gewoon mogelijk om dit met enkel SQL te realiseren. Bijvoorbeeld door iets als het onderstaande te schrijven:

[cpp]
WITH Kenmerknummers AS
(
SELECT Id FROM Kenmerken
)
SELECT kd.Id, kd.Kolomnaam, kd.Waarde FROM Kenmerknummers kn
INNER JOIN
(
SELECT Id, 'Kleur' AS Kolomnaam, CAST(Kleur AS VARCHAR) AS Waarde FROM Kenmerken

UNION

SELECT Id, 'Lengte' AS Kolomnaam, CAST(Lengte AS VARCHAR) AS Waarde FROM Kenmerken
-- etc voor alle overige kenmerken
) AS kd ON kn.Id = kd.Id
[/cpp]
 
Dank voor jullie reactie. Het probleem is dat ik dit 'truukje' wil kunnen herhalen voor heel veel van dit soort tabellen. Met dus heel veel soorten kenmerken. Inmiddels heb ik het toch maar opgelost met wat PHP.

Hier voor those who are interested:

<?php
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}


for ($tabel = 1; $tabel <= 8; $tabel++) {
//Begin: Kolomnamen in array gestopt

$sqldesc = "DESCRIBE xxxx123_vm_product_type_$tabel";
$resultdesc = $conn->query($sqldesc);
//$aantal is aantal kolomnamen
$aantal = $resultdesc->num_rows;

$rni=0;
while($rowdesc = $resultdesc->fetch_assoc()) {
$rni++;
$kolomnaam[$rni] = $rowdesc["Field"];
}


$sqltype = "SELECT xxxx123_vm_product_type_1.*, xxxx123_vm_product.product_sku
FROM xxxx123_vm_product_type_1
LEFT JOIN xxxx123_vm_product ON xxxx123_vm_product_type_1.product_id = xxxx123_vm_product.product_id;";
$resulttype = $conn->query($sqltype);
while($rowtype = $resulttype->fetch_assoc()) {
for ($x = 2; $x <= $aantal; $x++) {
$rnnaam = $rowtype[$kolomnaam[$x]];
$rnsku = $rowtype["product_sku"];
if ($rnnaam!="" && $rnnaam!=NULL && $rnnaam!="nvt" && $rnsku !="") {
echo """.$rnsku."";"".$kolomnaam[$x]."";"".$rnnaam.""<br />";
}
}
}
}


$conn->close();

?>
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan