Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[mysql][sql] kolom uitsluiten

Pagina: 1
Acties:

  • Erikie
  • Registratie: September 2000
  • Laatst online: 12-11 14:40

Erikie

www.erikie.nl

Topicstarter
Ik ben momenteel bezig met een poweradminbeheeriets aan het maken voor elk willekeurig tabel in een mysql database. De query om de lijst te vertonen is dood simpel : SELECT * FROM table . (makkelijker kan niet :) ). Maar wat als ik bijvoorbeeld een tabel heb met 3 kolommen, en daar wil ik er maar 2 van hebben? kan ik dit oplossen in sql, of moet ik toch in php met mijn fetched array gaan prutsen? Ik wil eigenlijk iets zoals dit doen (wat uiteraard niet werk :p ). SELECT *, NOT eenveldnaam FROM table .

Ik kan uiteraard in php wel een query samenstellen, maar dan heb ik al teveel onzin nodig zoals een query met 'show colomns from table', die in een array gooien, vervolgens vergelijken met een andere array en een nieuw query bouwen met 'SELECT veldnaam1, veldnaam2, ..... FROM table' . (ik had t in deze tijd al kunnen schrijven, maar ik vind een sql oplossing toch mooier, als die al bestaat! Dus wie kan mij vandaag blij maken :9

traktor scratch!


  • lier
  • Registratie: Januari 2004
  • Laatst online: 22:29

lier

MikroTik nerd

Volgens mij moet je een keuze maken of je dit in SQL of in PHP (of ander GUI omgeving) wil oplossen. Waar ik erg benieuwd naar ben de achtergrond voor wel of niet tonen van kolommen. Als dit statisch is, zou je het eenvoudig binnen de SQL op kunnen lossen.

Verder kan je ervoor kiezen om als parameter voor een stored procedure (als je daar mee wil spelen) de lijst van kolommen (en de tabel) mee te geven.

Uiteraard kan je uiteindelijk in je GUI altijd gegevens tonen of verbergen...

Ik ben persoonlijk voorstander van het expliciet op geven van kolomnamen in een SQL statement. Geef eens aan op basis van welke keuze de kolommen getoond/verborgen worden.

Eerst het probleem, dan de oplossing


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 21:39

MueR

Admin Devschuur® & Discord

is niet lief

Je kan toch gewoon die SELECT * gebruiken? Een array maken van tabellen met kolommen die je wil verbergen en vervolgens in je rendering $row[$bannedcolumnname] lekker negeren ?

Anyone who gets in between me and my morning coffee should be insecure.


  • dvvelzen
  • Registratie: Februari 2002
  • Laatst online: 07-08 19:20
Normaal gebruik je geen * maar uitgeschreven kolom namen. Wil je iets in sql kan je een tabel opnemen als:

Table|column|order|voorwaarde_1|voorwaarde_2

en dan een "select column from ... where table = 'table' and voorwaarde_1 = '..'" en dit concatten met een , ertussen.

of je gebruikt gewoon voorgedefineerde views.

my 2ct

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Meh, blacklisten is imo in dit geval stom. Whitelisten (expliciet kolommen die je wil hebben opgeven) is gewoon altijd good practice tov select *, dus ook hier. En ja, helaas, dat is wellicht in 1e instantie meer werk. Maar qua onderhoud en performance ben je er op de lange termijn veel beter mee af. :)

Maar ik vraag me eigenlijk af of je niet uberhaupt gewoon iets als phpMyAdmin aan het nabouwen bent...

{signature}


  • Erikie
  • Registratie: September 2000
  • Laatst online: 12-11 14:40

Erikie

www.erikie.nl

Topicstarter
Nou, ik ben bezig met een search & replace functie op een of meerdere kolommen & velden. Maar voor die list functie, die wil ik met ajax (uche) aanroepen, eh dit heeft er niks mee te maken. In iedergeval, af en toe wordt er html text in een database gepleurd, (voornamelijk in oude databases staat in de html code de volledige pad naar een plaatje bv). Aangezien ik die teksten niet 1 voor 1 wil aanpassen in phpmyadmin dacht ik ff snel een scriptje in elkaar te plakken :). Maar ik ga wel met specifiek alle fields benoemen (ik ben ook echt geen voorstander van select * from table), maar aangezien ik het alleen lokaal gebruik moet dit niet echt een beveiligings probleem zijn.

Maar ik heb t nu zover dat ik via ajax m'n hele tabel structuur zie van een specifieke tabel. Vervolgens wil ik met een paar buttons kolommen wegklikken, en dacht ik dus aan een ajax scriptje die een veldnaam in een sessie pleurt via ajax, en vervolgens (alsnog) een query in elkaar vouwt, en dan weer via ajax een nieuwe tabel genereert zonder die kolommen. Sja, 't is 5 regels meer code hehe. Maar er bestaat gewoon niet een sql statement van SELECT *, NOT id FROM table. (ps, deze qry werkt wel, maar laat in dit geval veld 'id' gewoon zien).

Volgende uitdaging is om met javascript te gaan regexpen en replacen naar bepaalde strings, en dit wil ik dan live zien natuurlijk alvorens ik alles opsla.. Wordt lache, maar daar kom ik wel uit :)

In iedergeval bedankt voor jullie (goddamn snelle) reacties!

//edit : omg

ik zie dat er dus een simpele sql functie bestaat voor wat ik dus wil doen :
update table set field = field(company_name, ‘www’, ‘http://www’)

//edit2 :
wel database specifiek

lol. Die search replace poweradminding kan wel weer op de schop :)

[ Voor 8% gewijzigd door Erikie op 08-10-2008 12:34 ]

traktor scratch!


Verwijderd

Select * is perfomanter als ik me niet vergis

  • lier
  • Registratie: Januari 2004
  • Laatst online: 22:29

lier

MikroTik nerd

Verwijderd schreef op woensdag 08 oktober 2008 @ 13:33:
Select * is perfomanter als ik me niet vergis
Als ik me niet vergis vergis je je nu... ;)

Eerst het probleem, dan de oplossing


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op woensdag 08 oktober 2008 @ 13:33:
Select * is perfomanter als ik me niet vergis
Nee, select * vermijden is juist de meest algemeen geldende performance tip. 8)7

{signature}


  • jant
  • Registratie: Juli 2000
  • Niet online
Je kan toch gewoon een view maken?

Een album per dag; een selectie: https://open.spotify.com/playlist/6s3nNLl8pJpCwLR3LPligA?si=dddc51153b2a49e8


  • harrald
  • Registratie: September 2005
  • Laatst online: 16-09 08:44
Voutloos schreef op woensdag 08 oktober 2008 @ 14:55:
[...]
Nee, select * vermijden is juist de meest algemeen geldende performance tip. 8)7
ik meen een keer gelezen te hebben dat * i.c.m. met COUNT sneller is, dit omdat er dan simpel weg naar de row werd gekeken en niet naar elk individueel veld. Maar in het geval van SELECT zal dat denk ik langzamer zijn omdat er zo en zo naar elk veld individueel word gekeken.

  • pedorus
  • Registratie: Januari 2008
  • Niet online
harrald schreef op zondag 12 oktober 2008 @ 22:42:
ik meen een keer gelezen te hebben dat * i.c.m. met COUNT sneller is, dit omdat er dan simpel weg naar de row werd gekeken en niet naar elk individueel veld.
Dat klopt. Het is ook good practice bij dingen als EXISTS (SELECT * FROM ...).
Maar in het geval van SELECT zal dat denk ik langzamer zijn omdat er zo en zo naar elk veld individueel word gekeken.
En het is gewoon geen best-practice. Het probleem is dat je vaak te veel velden op gaat halen, de volgorde van de velden lastig is te bepalen, en dat in de toekomst je query iets heel anders kan gaan doen.

Het lijkt mij dan ook fout als 'kolom uitsluiten' in SQL wordt ingebouwd. Dit is een user-interface probleem, wat niet moet worden opgelost door SQL uit te breiden. (En ik verwacht ook niet dat dit ooit gaat gebeuren. 8))

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

MueR schreef op woensdag 08 oktober 2008 @ 11:27:
Je kan toch gewoon die SELECT * gebruiken? Een array maken van tabellen met kolommen die je wil verbergen en vervolgens in je rendering $row[$bannedcolumnname] lekker negeren ?
Als het vanuit SQL zou kunnen, zou ik het vanuit SQL doen. Reden hiervan is, dat SQL dit soort dingen gewoon vele malen sneller kan afhandelen dan bijvoorbeeld PHP, die dan overigens alleen hetgeen wat teruggegeven word door SQL weer te geven, dan eerst over datgene nog eens (bij elke row!) net die ene kolom weg moet laten... ;)
Pagina: 1