abonnement Unibet Coolblue
pi_149751083


Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt :)

Zie ook:
PHP Dataverwerking
Officiële PHP website
PHP Documentatie
MySQL Reference Manual
Yet Another PHP Faq
PHP Cheat Sheet
PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc

Tutorials:
W3Schools PHP
W3Schools SQL

Succes heren met het volgende deeltje!

1
2
3
4
5
6
explain SELECT SQL_NO_CACHE `video_id`
FROM `video_tag_link` 
WHERE `tag_id` = 2721 OR `tag_id` = 245
GROUP BY `video_id`
HAVING COUNT(`video_id`) = 2
LIMIT 0, 20
en daar heb ik ook last van een filesort... wil dat eigenlijk voorkomen ;) en dat zou moeten kunnen...

:{
Just say hi!
pi_149752705
Ik weet niet wat je allemaal precies gedaan hebt, maar als ik even snel de volgende tabel aanmaak:

1
2
3
4
5
6
CREATE TABLE `video_tag_link` (
  `video_id` int(11) NOT NULL,
  `tag_id` int(11) NOT NULL,
  PRIMARY KEY (`tag_id`,`video_id`),
  KEY `video_id_index` (`video_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

en er vervolgens wat data ingooi en de query uit de OP uitvoer, dan krijg ik gewoon 'using where, using index'.

Kleine toevoeging:
Ik heb het vermoeden dat de oorzaak ligt in het feit dat je MyISAM als storage engine gebruikt in plaats van INNODB. Het is voor mij te lange geleden om exact te weten waardoor het verschil wordt veroorzaakt, maar volgens mij heeft het iets te maken met de manier waarop primary keys zijn geïmplementeerd. Hier een kleine uitleg.

[ Bericht 24% gewijzigd door Monolith op 17-02-2015 13:13:46 ]
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149757764
Ik heb
1
2
3
4
5
6
CREATE TABLE `video_tag_link` (
  `video_id` int(10) unsigned NOT NULL,
  `tag_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`tag_id`,`video_id`),
  KEY `video_id` (`video_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;[
27,400,090 rows, MyISAM, latin1_swedish_ci, 952,3 MiB

En krijg dan met dezelfde query als hierboven Using where; Using index; Using temporary; Using filesort

-edit-
Inderdaad MyIsam, heb gepoogd InnoDB te gebruiken maar heb daar vele problemen mee om de data in te voeren op juiste manier zonder fouten...

-edit2-
En het tabel omzetten naar InnoDB wil MySQL niet ;) Krijg een -1 van de storage engine...
Just say hi!
pi_149758873
quote:
0s.gif Op dinsdag 17 februari 2015 13:13 schreef Chandler het volgende:
Ik heb
[ code verwijderd ]

27,400,090 rows, MyISAM, latin1_swedish_ci, 952,3 MiB

En krijg dan met dezelfde query als hierboven Using where; Using index; Using temporary; Using filesort

-edit-
Inderdaad MyIsam, heb gepoogd InnoDB te gebruiken maar heb daar vele problemen mee om de data in te voeren op juiste manier zonder fouten...

-edit2-
En het tabel omzetten naar InnoDB wil MySQL niet ;) Krijg een -1 van de storage engine...
Mja, met 'krijg een -1 van de storage engine' kan ik niet zo veel.

Wat gebeurt er als je een nieuwe tabel maakt met INNODB als engine en de data daarin gooit?
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149760827
quote:
0s.gif Op dinsdag 17 februari 2015 13:13 schreef Chandler het volgende:
Ik heb
En het tabel omzetten naar InnoDB wil MySQL niet ;) Krijg een -1 van de storage engine...
quote:
If you see the following message, then you must enable innodb_file_per_table and create the table again: ERROR 1030 (HY000): Got error -1 from storage engine
http://www.percona.com/do(...)mporting_tables.html
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
pi_149761096
Volgens mij heb ik nog nooit anders dan InnoDB gebruikt? Ik dacht dat MyIsam een beetje ouderwets was?
pi_149761471
quote:
14s.gif Op dinsdag 17 februari 2015 14:58 schreef KomtTijd... het volgende:
Volgens mij heb ik nog nooit anders dan InnoDB gebruikt? Ik dacht dat MyIsam een beetje ouderwets was?
Voor archieven wordt het nog wel gebruikt. Kost stuk minder ruimte qua opslag.
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
pi_149766422
Ik heb even een tmp tabel met innodb aangemaakt, maar wanneer ik de eerste insert doe... krijg ik gelijk het volgende voor m'n kiezen.

INSERT INTO `video_tag_link` VALUES ( 1, 1 ) ;

MySQL meldt: Documentatie
#1062 - Duplicate entry '1-1' for key 'PRIMARY'

Precies dezelfde DB maar dan InnoDB plus complete inserts (want SELECT * INTO tabel FROM tabel) werkte ook niet...
Just say hi!
pi_149766770
lijkt me een vrij duidelijke foutmelding waar je wat mee kunt.
pi_149766843
Helaas niet, want alle data in de myisam tabel is uniek en zou dus geen probleem moeten opleveren... heb al een uurtje zitten googlen maar kan geen 'oplossing' hiervoor vinden...
Just say hi!
  dinsdag 17 februari 2015 @ 18:54:53 #11
187069 slacker_nl
Sicko pur sang
pi_149768697
quote:
0s.gif Op dinsdag 17 februari 2015 18:01 schreef Chandler het volgende:
Helaas niet, want alle data in de myisam tabel is uniek en zou dus geen probleem moeten opleveren... heb al een uurtje zitten googlen maar kan geen 'oplossing' hiervoor vinden...
Wat zegt select * from video_tag_link je? en hoe ziet die tabel eruit?
In theory there is no difference between theory and practice. In practice there is.
pi_149768989
Dit zijn inderdaad een beetje die 'het werkt niet, help me' post waar we erg weinig mee kunnen. Als je dit soort dingen post, geef dan de tabeldefinitie, data, query, enzovoort.
Probeer het ook eens op stackoverflow anders, daar zit ook nog wel de nodige kennis.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149771649
Bij deze een volledige uitleg.

Ik heb een link tabel voor het linken van tags aan video's, deze tabel is groot, erg groot en bevat maar 2 velden (video_id en tag_id). Uit dit tabel kan ik een of meerdere tags zoeken waarbij deze tags allemaal gevonden moeten worden bij ieder video_id.

Tabel:
1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS `video_tag_link` (
  `video_id` int(10) unsigned NOT NULL,
  `tag_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`tag_id`,`video_id`),
  KEY `video_id` (`video_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
En wat data
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
28
29
30
31
INSERT INTO `video_tag_link` (`video_id`, `tag_id`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 1),
(5, 1),
(6, 1),
(7, 1),
(8, 1),
(9, 1),
(10, 1),
(11, 1),
(13, 1),
(15, 1),
(17, 1),
(18, 1),
(19, 1),
(20, 1),
(21, 1),
(22, 1),
(23, 1),
(25, 1),
(26, 1),
(27, 1),
(29, 1),
(30, 1),
(31, 1),
(32, 1),
(33, 1),
(35, 1),
(36, 1);

Probleem is filesort op de volgende query:
1
2
3
4
5
6
SELECT SQL_NO_CACHE `video_id`
FROM `video_tag_link` 
WHERE `tag_id` = 2721 OR `tag_id` = 245
GROUP BY `video_id`
HAVING COUNT(`video_id`) = 2
LIMIT 0, 20

1
2
3
4
5
6
7
8
9
10
1
SIMPLE
video_tag_link
range
PRIMARY,video_id
PRIMARY
4
NULL
6480
Using where; Using index; Using temporary; Using filesor

Omzetten op wat voor manier naar InnoDB wil niet... en queries optimaliseren ook niet :)
Just say hi!
pi_149771719
Dat omzetten naar InnoDB niet werkt ligt toch echt aan jou of je MySQL setup. Ik krijg dat zonder moeite voor elkaar.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149781839
Zeer vreemd Monolith, ik gebruik zelf de standaard versie van usbwebserver en zou dus gewoon moeten werken lijkt me... krijg ook verder geen andere foutmeldingen oid...
Just say hi!
pi_149783300
Lag inderdaad aan mijn webserver, heb alles opnieuw geconfigureerd en hoopa!! het werkt!! nu eens al mijn tabellen omzetten naar InnoDB!!
Just say hi!
pi_149786125
quote:
0s.gif Op maandag 16 februari 2015 23:14 schreef raptorix het volgende:

[..]

Volgens mij heeft een index geen zin op een integer, maar daar twijfel ik even over, of dat puur op numeriek is of een autoID (bestaat dat in MySql?)
Deze post uit het vorige topic verdient ook nog wel even een reactie aangezien het concept 'index' in deze reeks vaak niet echt begrepen lijkt en men enkel weet dat 'queries er sneller van worden', zonder het wat en waarom van een index te snappen. Deze site heeft wel prima verdere uitleg.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149788132
Stel, ik heb een Maria DB-database (voetbalgerelateerd) met daarin 3 tabellen:

- Divisie
- Seizoen
- DivisieSeizoen

Divisie en Seizoen:



DivisieSeizoen is de koppeltabel tussen Divisie en Seizoen, met wat extra gegevens.

Links voorbeeld van de koppeling, rechts hoe het wordt opgeslagen in de tabel.


Ik wil de gegevens via een HTML/PHP-formulier invoeren:

Divisie kiezen uit dropdownlist (waarden uit tabel Divisie).
Seizoen kiezen uit dropdownlist (waarden uit tabel Seizoen).
Datums handmatig invoeren.

Het resultaat hiervan wil ik opslaan in DivisieSeizoen. Ik wil dus een Divisienaam selecteren, maar de PK van de geselecteerde Divisie opslaan. Hetzelfde bij Seizoen.

Hoe krijg ik dit voor elkaar? Ik bedoel, ik heb op het internet gezocht, maar kan niets vinden waar ik zelf wat mee kan... Iemand van jullie een idee, wellicht een link naar een tutorial of wat dan ook?

Of denk ik verkeerd of hoort dit op een hele andere manier?!

[ Bericht 1% gewijzigd door #ANONIEM op 18-02-2015 11:26:19 ]
  woensdag 18 februari 2015 @ 11:30:32 #19
63192 ursel
"Het Is Hier Fantastisch!
pi_149788322
1
2
3
4
<select name="divisie" form="divisieform">
  <option value="1">Super lig</option>
  <option value="2">2. Lig</option>
</select>

Toon je de naam, maar de waarde die je formulier verstuurd is het ID.
pi_149788700
Nogal een brede vraag, basically vraag je "hoe maak ik een PHP webapplicatie met database?"

Watvoor framework gebruik je (if any)? En wat wil er precies niet lukken? Waar loop je op vast?
pi_149800925
quote:
0s.gif Op woensdag 18 februari 2015 09:46 schreef Monolith het volgende:

[..]

Deze post uit het vorige topic verdient ook nog wel even een reactie aangezien het concept 'index' in deze reeks vaak niet echt begrepen lijkt en men enkel weet dat 'queries er sneller van worden', zonder het wat en waarom van een index te snappen. Deze site heeft wel prima verdere uitleg.
Thx, ik kende deze theorie wel, ik weet niet hoet met mysql zit, maar in sqlserver kun je bij een index ook een fragmentation rate aangeven. Gebruik je niet heel vaak, maar met name wanneer performance belangrijk is valt er wel mee te tunen.

Zelf heb ik in verleden veel aan Funda gewerkt, met name aan de eerste versies heb ik veel aan de search gewerkt dus wel bekend met tuning ;)

De eerste versie van Funda was ook een readonly database, dat scheelt je al snel 30 procent performance omdat zodra een database in readonly is, hij geen rekening hoeft te houden met locking of aangepaste indices.
🕰️₿🕰️₿🕰️₿🕰️₿🕰️₿🕰️ TikTok next Block
pi_149801283
Wij liepen trouwens ook een keer tegen een grappig index probleem aan, na een release was de performance dramatisch geworden, dit bleek achteraf omdat er een stukje SQL was aangepast waar een query werd gedaan via een UPPER cast zodat zoeken op plaats niet meer hoofdlettergevoelig was. Echter wanneer je een sqlserver database hebt die casesensitive is, je cast alles naar Hoofdletters in je query, dan zegt sql server: Mooi, dan is mijn index ook zinloos, laat ik die maar niet gebruiken :)
🕰️₿🕰️₿🕰️₿🕰️₿🕰️₿🕰️ TikTok next Block
pi_149801826
quote:
0s.gif Op woensdag 18 februari 2015 18:39 schreef raptorix het volgende:

[..]

Thx, ik kende deze theorie wel, ik weet niet hoet met mysql zit, maar in sqlserver kun je bij een index ook een fragmentation rate aangeven. Gebruik je niet heel vaak, maar met name wanneer performance belangrijk is valt er wel mee te tunen.

Zelf heb ik in verleden veel aan Funda gewerkt, met name aan de eerste versies heb ik veel aan de search gewerkt dus wel bekend met tuning ;)

De eerste versie van Funda was ook een readonly database, dat scheelt je al snel 30 procent performance omdat zodra een database in readonly is, hij geen rekening hoeft te houden met locking of aangepaste indices.
Voor read only kun je tegenwoordig dan weer beter noSQL databases gebruiken doorgaans qua performance.
Fragmentatie is de mate waarin je index verspreid is over je opslag. Hoe meer fragmentatie, des te trager het gebruik van de index.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149804047
quote:
1s.gif Op woensdag 18 februari 2015 19:09 schreef Monolith het volgende:

[..]

Voor read only kun je tegenwoordig dan weer beter noSQL databases gebruiken doorgaans qua performance.
Fragmentatie is de mate waarin je index verspreid is over je opslag. Hoe meer fragmentatie, des te trager het gebruik van de index.
Fragmentatie is volgens mij in deze betekenis de mogelijkheden om je index te updaten, zoals ik het altijd begrepen hebt werkt het net als in papieren index dat je meer ruimte hebt om wijzigingen te doen (wat uiteraard wel ten koste gaat van meer opslag, en dus performance).
🕰️₿🕰️₿🕰️₿🕰️₿🕰️₿🕰️ TikTok next Block
pi_149804805
quote:
0s.gif Op woensdag 18 februari 2015 20:03 schreef raptorix het volgende:

[..]

Fragmentatie is volgens mij in deze betekenis de mogelijkheden om je index te updaten, zoals ik het altijd begrepen hebt werkt het net als in papieren index dat je meer ruimte hebt om wijzigingen te doen (wat uiteraard wel ten koste gaat van meer opslag, en dus performance).
Nee, dat is een ander concept, fragmentatie heeft te maken met logische versus fysieke ordening, waardoor het lezen van de schijf trager gaat.
Zie bv:
https://msdn.microsoft.com/en-us/library/ms189858.aspx
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')