Archief - PHP/Mysql: zoeken naar tabel(naam)

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Zeppelin

Legacy Member
Hello

K zoek een methode om in PHP te controleren of een bepaalde tabel al bestaat in de DB.

Bedoeling is dat ik op basis van een username ga kijken of de tabel al bestaat, als die al bestaat wordt hij netjes met alle bijkomende info in de tabel geplaats. Maar als die tabel nog niet bestaat, moet eerst de tabel worden aangemaakt met de juiste velden etc...daarna wordt de info in die tabel geplaatst.

Iemand hier info ofzo over?

Alvast bedankt

GuntherDW

Legacy Member
zou da ni gaan me een combinatie van een aantal SQL queries (2)
1 voor de controle en als ze dan uiteindelijk niet bestaat gewoon de 2de uitvoeren
is het makkelijkste denk ik
als ge wilt willek wel ff voorbeeldcode schrijven :)

Psychokillah

Legacy Member
Ik weet niet goed wat uw plan is,
maar als ik het zo lees ga je per nieuwe user een nieuwe tabel met gegevens aanmaken.

Indien dat het geval is:
dat is een heel lelijke methode om met databases te werken omdat je daar enorm veel overhead mee gaat veroorzaken en het zoekwerk bemoeilijken.
Beter is om 1 gegevenstabel te maken en die in relatie te brengen met uw users-tabel.
Afhankelijk van de structuur van uw database doet ge da
- ofwel door een extra kolomeke in die gegevens-tabel te plaatsen dat de waarde van de user waar het bijhoort bevat per entry.
voorbeeldje: stel da ge een tabel 'Users' hebt met daarin een id en een Usernaam, dan maakt ge best een tabel 'gegevens' met daarin de kolommen die ge wilt + een kolom id die dan overeenkomt met de id van de user waar de gegevens bij horen.
Om dan te zien of een user gegevens heeft kunt ge gewoon zoeken of zijn id al in de tabel voorkomt en moet ge ook ni liggen foefelen me het aanmaken van nieuwe tabellen
- (Ofwel moet ge nog een extra relatie-tabelleke aanmaken, maar ik denk ni dat dat bij u zhet geval is).

Indien dit niet het geval is:
verduidelijk aub met een meer gegevens over uw db ;)

NeoNeke

Legacy Member
idem dito psycho killer zu

Zep, contact me desnoods eens op msn om uw ei kwijt te geraken

servi

Legacy Member
wat je kan doen is het volgende :

PHP:
<?php
  @mysql_query('SELECT * FROM UWTABEL');
  if ( mysql_errno() != 0 ) {
      echo "Tabel bestaat niet !";
}
?>

maar als je moet gaan testen of een tabel bestaat is er toch iets vreemd aan de hand met je database.

orez

Legacy Member
servi zei:
wat je kan doen is het volgende :

PHP:
<?php
  @mysql_query('SELECT * FROM UWTABEL');
  if ( mysql_errno() != 0 ) {
      echo "Tabel bestaat niet !";
}
?>

maar als je moet gaan testen of een tabel bestaat is er toch iets vreemd aan de hand met je database.

ik controleer dit ook voor een bepaalde toepassing die ik geschreven heb binnen een bedrijf... een toepassing die een UNION doet via een selectie uit 2 tabellen... die 2 tabellen zijn lichtere gegenereerde tabellen vanuit een enorm grote en zwarte database met enorm grote tabellen... Nu om dit te refreshen en te doen zit er een controle op, die controleert als de gemaakte tabel van die SELECT INTO wel bestaat... bestaat die niet dan wordt deze gecreeërd, bestaat deze wel wordt deze verwijderd en volledig opnieuw gevuld ... (mss ook niet de ideale manier... mor blijkbaar werkte da op die database het vlugst :p)

Nu de code dat ik daarvoor gebruik is SQL only ... (mss wel MSSQL) , kweet wel niet als MySQL dit ondersteunt maar is dus het volgende:

Code:
if EXISTS (SELECT * FROM INFORMATION_SCHEMA.tables WHERE table_name = 'tblStock') DROP TABLE tblStock

dus na die exists kan je mss verder gaan met eengebruiksdatabase eh... vanaf DROP TABLE kun je dan bv een SELECT doen of een CREATE whatever éh ... ge kunt idd ook met if else werken binnen SQL

Zeppelin

Legacy Member
Psychokillah zei:
Ik weet niet goed wat uw plan is,
maar als ik het zo lees ga je per nieuwe user een nieuwe tabel met gegevens aanmaken.

Ok was beetje onduidelijk mss, is dus voor een soort reisbureau. Bedoeling is dat de gebruiker een paar gegevens invult bij het bestellen, 1 van die gegevens is de naam van zn universiteit ( doelpubliek zn amerikaanse studenten) zoals je weet hebben al die universiteiten officiële afkortingen (vb :NYU = New York University) op basis van die afkorting krijgt de gebruiker een username (vb: NYU_1234)

Maar de bedoeling is dat men in groep per university op reis gaat. Dus er gaan nog 19 andere kunnen inschrijven per university => 19 andere usernames met als prefix NYU dus....

Zie je waar k naartoe wil gaan, dus eig is t per university een aparte tabel. In de db "orders" zou k dan allemaal tabellen met als titel de afkorting van de university krijgen. In elke tabel zitten dan 20 users met hun gegevens.

2de probleempje: int begin gaat die DB leeg zijn, oe ga k dan een query moeten opstellen in de trend van SELECT * FROM (normaal gezien een tabel, maar aangezien de db leeg is???)

Al een beetje duidelijker?

Kn0t

Legacy Member
Wat psychokillah zei over het feit dat een nieuwe tabel aanmaken per user geen goed idee is geldt evengoed voor het aanmaken van een nieuwe tabel per universiteit hoor..

1 tabel aanmaken waar je alle universiteiten in zet met een uniek id, naam en afkorting, en vervolgens in je andere tabel(len) verwijzen naar dit id.

NeoNeke

Legacy Member
jah de oplossing is simpel zu zep

maak een database met users zoals je meestal zou doen
daarin steekt ge een kolom: univiversity....
en een kolom met user_id (de id die als volgt is NYU_1234)
(ook nog een gewone id-kolom, niet vergeten)

iedere keer iemand wil inschrijven roept ge eerst in uw php verwerkscript nen query op ongeveer als volgt

SELECT * FROM gebruikers WHERE univ = "$_POST['univ']

ziezo nu kan je die gaan tellen (mysql_num_rows ()) die var vermeerder je dan met één en dan via vars aanelkaar knopen en voila ge hebt uw user_id

Psychokillah

Legacy Member
idd,
wat jij allemaal gaat doen zijn, excuse my french, heel lelijke dingen.
Per univeristeit een tabel met studenten is fout omdat:
- Bij veel gegevens ga je enorm veel overhead hebben
- Uw databases heeft op den duur totaal geen samenhang meer(probeer bvb maar eens 1 student te zoeken in uw db)
- Als ge ingewikkeldere dingen wilt opvragen gaadde u serieus in bochten moeten wringen om da in nen query te krijgen

Om te beginnen het idee al om met verschillende databases te werken: Voor zulk klein projectje, heb je niet meer dan 1 database nodig hoor.
Je hoeft immers maar 1 keer erop te connecteren (in jou plan moet je telkens je van DB verandert een nieuwe connectie maken, en ik weet zelfs niet of je 2 connecties simultaan kunt laten lopen, dus dingen selecteren in de ene en gebruiken in de andere is ook uitgesloten)

Maak best 3 hoofdtabbellen:
- Universiteit
- Student
- Order

En koppel die zoals hierboven reeds door enkelen al is uitgelegd(vraag meer uitleg indien nodig). Zo gaan je queries het soepelst zijn.

Dece

Legacy Member
eventueel kan je ook volgende query loslaten:
mysql_query("SHOW TABLES");

dit retourneerd dan een alle tables welke in de db zitten.
Maar zoals hier reeds meermaals aangekaart: Voor iedere klant een nieuwe tabel aanmaken druist in tegen alle regels van database beheer / systemen

Zeppelin

Legacy Member
ok, dan zal k t zo doen. Dacht da t gwoon handiger zou zijn, dan kon k mooi late zien welke univ al hebben ingeschreven etc...mjah zal ook zo wel gaan zeker :)

Toch bedankt :niceone:

dJeez

Legacy Member
Als je wil zien welke univ al hebben ingeschreven gebruik je gewoon een count die groepeert per univ hé. Het beste lijkt mij dat je eerst wat tijd steekt in het leren gebruiken van relationele databases precies.

messiah´

Legacy Member
Wow, aan normalisatie doet niemand meer zeker?

Zo'n methodologie is smeken om redundante gegevens.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan