[PHP/SQL] twee velden als één

Pagina: 1
Acties:

Onderwerpen


  • leendertv
  • Registratie: September 2007
  • Laatst online: 09-08-2022
Een beetje een rare titel waarschijnlijk, maar ik wil het volgende:

Ik heb een tabel met muziekfilmpjes. In die tabel staat onder andere van elk fimpje de componist en uitvoerende.

Dus
Tabelnaam: Filmpjes
Velden: Film_id, Film_naam, componist, uitvoerende

Ik wil alle aanwezige namen van de uitvoerende en componisten in een lijst tonen.

Deze lijst moet gesorteerd zijn op de naam, en elke naam mag maar één keer getoond worden, (dus zowel de uitvoerende en de componisten moeten zeg maar op één hoop gegooid worden, deze hoop moet gesorteerd worden en de dubbele er uit gehaald worden)

Ik heb al nagedacht over GROUP BY en Joins maar kom er echt niet uit.

Alvast bedankt voor het meedenken!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als ik je probleem goed begrijp, is dat iets dat je helemaal niet in SQL maar in je applicatie wil oplossen; het kan wel (in MySQL bijvoorbeeld met een Group_Concat ofzo als ik me niet vergis) maar daar is SQL helemaal niet voor bedoeld. Een weergave laat je door je applicatie afhandelen, het bij elkaar sprokkelen van de data door SQL.

Ik denk dat ik je probleem niet goed begrepen heb :P

Wat heb je al geprobeerd en wat werkte er niet? Waarom werkt een group by niet volgens jou?

[ Voor 26% gewijzigd door RobIII op 13-09-2008 19:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • blaatkipje
  • Registratie: Maart 2007
  • Laatst online: 07-09 09:38
Kan je dit niet oplossen met DISTINCT ?

  • leendertv
  • Registratie: September 2007
  • Laatst online: 09-08-2022
blaatkipje schreef op zaterdag 13 september 2008 @ 19:50:
Kan je dit niet oplossen met DISTINCT ?
DISTINCT zorgt er gewoon alleen voor dat er geen dubbele van een bepaald veld geselecteerd worden.

Ik denk toch dat ik het niet met sql moet doen maar iets in php zelf moet programmeren, khep alleen geen idee hoe ik dit aan moet pakken.

Even stap voor stap op een rijtje:

- Haal alle uitvoerende op uit de tabel (haal dubbele eruit)
- Haal alle componisten op uit de tabel (haal dubbele eruit)
- Gooi de uitvoerenden en componisten uit de vorige stappen op één hoop, haal weer de dubbele eruit (een componist kan in een ander filmpje ook uitvoerende zijn).
- Toon de lijst uit de vorige stap op alfabetische volgorde.

De eerste twee stappen kan ik nog wel apart doen, maar om het vervolgens te combineren dat wilt echt niet lukken.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kijk eens naar een union ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • leendertv
  • Registratie: September 2007
  • Laatst online: 09-08-2022
Moeten de twee velden dan niet dezelfde naam hebben?

  • !null
  • Registratie: Maart 2008
  • Laatst online: 11-09 14:00
Inderdaad UNION gebruiken, en over die dubbele query weer een SELECT doen.
En dan de uitvoerende + componist veld allebei naar zelfde veld hernoemen.
Zoiets:

code:
1
2
3
4
5
6
7
SELECT DISTINCT persoon FROM
(
    SELECT componist AS persoon FROM filmpjes
    UNION
    SELECT uitvoerende AS persoon FROM filmpjes
)
ORDER BY persoon DESC


Op deze manier doe ik volgens mij jou vier stappen in een query. Dan kan je er zelf wel wat nuttigs mee doen, met GROUP BY etc. Misschien kan het ook wel in een keer met een JOIN op de tabel zelf.
Verder kan de werking van queries in queries nog wel een verschillen (of gewoon niet werken) wat betreft mysql 4 vs 5

[ Voor 38% gewijzigd door !null op 13-09-2008 20:56 ]

Ampera-e (60kWh) -> (66kWh)


  • leendertv
  • Registratie: September 2007
  • Laatst online: 09-08-2022
@GreenSky:

Bedankt voor het meedenken,

op mijn host heb ik MySQL 4.1.22. En krijg ik een foutmelding op lijn 12 als ik, heel simpel, het volgende doe:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
include('connect.php');

$query=mysql_query("SELECT DISTINCT persoon FROM
(
    SELECT componist AS persoon FROM filmpjes
    UNION
    SELECT uitvoerende AS persoon FROM filmpjes
)
ORDER BY persoon DESC"); 

while($data = mysql_fetch_array($query)){
    
  print $data['persoon']."<br />";
      
}
?>


Alle veldnamen, en tabelnaam klopt gewoon, de tabel is ook gewoon gevult, dus daar zal het ook niet misgaan.

Werkt deze manier niet op mijn MYSQL versie?

  • !null
  • Registratie: Maart 2008
  • Laatst online: 11-09 14:00
Zou kunnen. Gebruik iig mysql_error() om de laatste foutmelding eruit te krijgen, dan kan je zien wat ie zegt. Ik weet de werking bij dit soort dingen ook nooit uit m'n hoofd per mysql versie.

Ah ik zit redelijk in de buurt, kijk hier voor jou versie:
http://dev.mysql.com/doc/refman/4.1/en/unnamed-views.html

Je moet de subquery dus verplicht afsluiten met een alias ..FROM (subquery) AS filmpjessubquery...

[ Voor 37% gewijzigd door !null op 13-09-2008 21:21 ]

Ampera-e (60kWh) -> (66kWh)


  • leendertv
  • Registratie: September 2007
  • Laatst online: 09-08-2022
GreenSky schreef op zaterdag 13 september 2008 @ 21:16:
Zou kunnen. Gebruik iig mysql_error() om de laatste foutmelding eruit te krijgen, dan kan je zien wat ie zegt. Ik weet de werking bij dit soort dingen ook nooit uit m'n hoofd per mysql versie.

Ah ik zit redelijk in de buurt, kijk hier voor jou versie:
http://dev.mysql.com/doc/refman/4.1/en/unnamed-views.html

Je moet de subquery dus verplicht afsluiten met een alias ..FROM (subquery) AS filmpjessubquery...
Wow, bedankt man! Zo werkt het perfect!

Hier heb ik echt weer heel wat van geleerd, dankje!

[ Voor 4% gewijzigd door leendertv op 13-09-2008 21:48 ]


  • !null
  • Registratie: Maart 2008
  • Laatst online: 11-09 14:00
Alsje. Ik probeer ook altijd zoveel mogelijk in de query te doen, zo weinig mogelijk in PHP.

Ampera-e (60kWh) -> (66kWh)

Pagina: 1