[mysql] concat & NULL probleempje

Pagina: 1
Acties:

  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  child.id,
  parent.id,
  CONCAT(IF (STRCMP('',parent.omschrijving), '', parent.omschrijving), child.omschrijving) AS omschrijving
FROM
  ezpagecategorie child
LEFT JOIN
  ezpagecategorie parent
ON
  child.id_ezpagecategorie = parent.id
ORDER BY
  omschrijving

Nu heb ik een probleem: als parent.omschrijving NULL is, is de omschrijving welke er uit de concat komt dit ook...

Hoe vang ik dit af?

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:22
Checken of het veld NULL is en vervangen door ' ' ?

https://fgheysels.github.io/


  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
Ik heb 'm dus ook al zo geprobeerd, maar dat werkt ook nie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  child.id,
  parent.id,
  CONCAT(IF (STRCMP(NULL,parent.omschrijving), '', parent.omschrijving), child.omschrijving) AS omschrijving
FROM
  ezpagecategorie child
LEFT JOIN
  ezpagecategorie parent
ON
  child.id_ezpagecategorie = parent.id
ORDER BY
  omschrijving

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op maandag 08 juli 2002 13:03 schreef Skef het volgende:
code:
1
2
SELECT
  CONCAT(IF (STRCMP('',parent.omschrijving), '', parent.omschrijving), child.omschrijving) AS omschrijving

[...]
Ik lees hierin:
concateneer parent.omschrijving en child.omschrijving
waarom doe je dat ook niet gewoon ipv die STRCMP en IF - constructie?

  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
Omdat ik er later nog een " - " tussen wil zetten...

En als ik dat concat, dan krijg ik weer hetzelfde liedje: weer die NULL.....

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

die strcmp zal wel niet werken op je null? Doe dan 'IF parent.omschrijving IS NULL' ?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Kijk eens in de manual van mysql. Daarin staat ook een CONCAT_WS. Die gaat volgens mij wat beter om met velden die null kunnen zijn (en een leuke oplossing voor je streepje).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Wat dacht je van dit statement:
CONCAT_WS(separator, str1, str2,...)
CONCAT_WS() stands for CONCAT With Separator and is a special form of CONCAT(). The first argument is the separator for the rest of the arguments. The separator can be a string as well as the rest of the arguments. If the separator is NULL, the result will be NULL. The function will skip any NULLs and empty strings, after the separator argument. The separator will be added between the strings to be concatenated:
mysql> SELECT CONCAT_WS(",","First name","Second name","Last Name");
-> 'First name,Second name,Last Name'
mysql> SELECT CONCAT_WS(",","First name",NULL,"Last Name");
-> 'First name,Last Name'

Gevonden op www.mysql.com/doc en dan kijken bij de string-functions

edit:
Net iets later dan Janoz

  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
Ik denk dat ik het hiermee wel ga redden...

FF wat anders: Kun je in mysql een recursive query maken?

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Bedoel je zoiets als "connect by" statement om hierarchische structuren af te lopen?

  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
Ik heb dus iid iets van een boomstructuur, en nu wil ik (als dit mogelijk is) zonder tussenkomst van PHP die boomstructuur laten returnen in een veld dmv een concat oid...

Ken dit?

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

MySQL kan dat niet, maar zoek maar eens naar "boomstructuur" hier op GoT en je komt interessante topics tegen over alternatieve oplossingsmogelijkheden
Op maandag 08 juli 2002 13:20 schreef Skef het volgende:
Ik heb dus iid iets van een boomstructuur, en nu wil ik (als dit mogelijk is) zonder tussenkomst van PHP die boomstructuur laten returnen in een veld dmv een concat oid...

Ken dit?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Zeer waarschijnlijk niet. Er zijn wel andere methoden om een boomstructur te achterhalen met slechts 1 query, maar dit legt wel beperkingen aan bijvoorbeeld de diepte en het aantal kinderen op.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
Op maandag 08 juli 2002 13:23 schreef Janoz het volgende:
Zeer waarschijnlijk niet. Er zijn wel andere methoden om een boomstructur te achterhalen met slechts 1 query, maar dit legt wel beperkingen aan bijvoorbeeld de diepte en het aantal kinderen op.
Hell no :) Check deze draad maar es :)

edit:
Hmm, is alleen het resultaat niet in 1 veld... Ff iets te snel gelezen, maar misschien heb je er toch wat aan :D

  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
Wat bij mij dus het geval is: ik moet de data allemaal laten maken door een query, er kan niks meer door php gedaan worden dan de $omschrijving en de $id er uit vissen...

Nu is mijn tree zoiets:
code:
1
2
3
4
5
6
7
8
_Kennisplein
 |
 |_moederschap
 | |
 | |_geestelijk
 | |_fysiek
 |
 |_vaderschap

Veel dieper dan 3 a 4 niveau's gaat het niet...

Iemand een idee?

Edit: en het gaat er dus om, dat ik puur dingen zoals "Kennisplein - moederschap - geestelijk" uit die concat krijg...

En onder elk tree-element zijn ook weer pagina's te knallen...

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
Waarom kan je PHP er nix meer aan doen erna?

  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
Op maandag 08 juli 2002 14:28 schreef elviver het volgende:
Waarom kan je PHP er nix meer aan doen erna?
Dit kan niet, omdat het binnen een cms komt, waar een heleboel standaard-componenten in zitten (open-module, save-module enz.)...

Deze query wordt uiteindelijk opgeslagen in de database, en wordt gebruikt om op het moment dat iemand iets wil openen uit die tabel, de inhoud van de tabel op de juiste wijze weer te geven. Dit doet ie in een heleboel gevallen automatisch (hij pakt dan alleen de eerste string welke in een tabel voorkomt), maar een aantal gevallen vereist een speciale query, met wat uitgebreidere informatie.

Zie eerdere topics (zoek maar eens op concat, of Skef binnen /14, en je komt zat tegen wat daar ook in draait)...

Snap je 't nog?

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op maandag 08 juli 2002 14:16 schreef elviver het volgende:

[..]

Hell no :) Check deze draad maar es :)

edit:
Hmm, is alleen het resultaat niet in 1 veld... Ff iets te snel gelezen, maar misschien heb je er toch wat aan :D
Heb je ook ff bij de efficientie gekeken daar? Niet echt gunstig :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
Maarre, kan er iemand ff meedenken over die tree-query?

Hoe kan ik een niveautje of 4/5 diep gaan in een query, waarbij de concat de waarden aan elkaar zet en returned als "omschrijving"?

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
Worstel-de-worstel, maar er komt nog wel eens een goed idee uit op de vroege ochtend...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
SELECT
  first.id,
  CONCAT_WS(' - ',sixth.omschrijving, fifth.omschrijving, fourth.omschrijving, third.omschrijving, second.omschrijving, first.omschrijving) AS omschrijving
FROM
  ezpagecategorie first
LEFT JOIN
  ezpagecategorie second
ON
  first.id_ezpagecategorie = second.id
LEFT JOIN
  ezpagecategorie third
ON
  second.id_ezpagecategorie = third.id
LEFT JOIN
  ezpagecategorie fourth
ON
  third.id_ezpagecategorie = fourth.id
LEFT JOIN
  ezpagecategorie fifth
ON
  fourth.id_ezpagecategorie = fifth.id
LEFT JOIN
  ezpagecategorie sixth
ON
  fifth.id_ezpagecategorie = sixth.id
ORDER BY
  omschrijving

(sorry voor de layout-fucked-up) :P :P

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."


  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
Da's nog minder efficient als wat ik eerder postte volgens mij...
Op maandag 08 juli 2002 14:16 schreef elviver het volgende:

[..]

Hell no :) Check deze draad maar es :)

edit:
Hmm, is alleen het resultaat niet in 1 veld... Ff iets te snel gelezen, maar misschien heb je er toch wat aan :D

  • Skef
  • Registratie: April 2001
  • Laatst online: 01-09 15:32

Skef

Ik scheer.me

Topicstarter
Efficientie maakt in dit geval niet zo gek veel uit, de query zal hooguit (gemiddeld) 5 keer per dag gebruikt worden... Misschien dat ik later nog een nieuwe maak, maar voorlopig werkt dit goed genoeg!

"Computer games don’t affect kids: I mean if Pac-Man affected us as kids, we’d all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."

Pagina: 1