Hendrik6073 Geplaatst: 21 oktober 2009 Delen Geplaatst: 21 oktober 2009 Ik heb voor een database achter een website een tekstbestand ontvangen met daarin 1100 regels (namen). Deze wil ik importeren in de database. De import verloopt goed. Als ik een query doe om op een gedeelte te zoeken (bijvoorbeeld: SELECT * FROM namen WHERE naam like '$letter%' and geslacht='heren'). Krijg ik geen results. Nu ben ik er inmiddels achter dat het probleem hem waarschijnlijk in de collatie zit. Ik heb het bestand al opgeslagen als utf-8, unicode etc. en daarna opnieuw geimpoteerd. Ook de tabel heb ik al aangepast en gelijk gemaakt aan het type dat ik in het tekst bestand opsla. gebruik als editor voor het tekstbestand notepad. Ook heb ik als een Excel CSV bestand gebruikt. Niets had het gewenste resultaat. Wat de aan te bevelen manier om de geimporteerde data ook binnen dergelijk query's te kunnen gebruiken ? Bij voorbaat dank. Link naar reactie Delen op andere sites Meer opties om te delen...
Duwgati Geplaatst: 22 oktober 2009 Delen Geplaatst: 22 oktober 2009 Heb je ook de query bij de hand waarmee de table "namen" is aangemaakt? Link naar reactie Delen op andere sites Meer opties om te delen...
Hendrik6073 Geplaatst: 22 oktober 2009 Auteur Delen Geplaatst: 22 oktober 2009 Die is gemaakt in phpmyadmin. Ik heb inmiddels wel voor elkaar om de gegevens in beeld te krijgen. Kwam erachter dat er (welliswaar onzichtbaar) spaties in de namen zaten met een trim() commando heb ik deze eruit gehaald en zie dus nu de namen wel met een zoekactie. Maarrrrrr....... zo eenvoudig kon het natuurlijk niet zijn, als ik nu een naam bijplaats wordt deze in een sortering niet goed meegenomen. kan ik op een of andere manier mijn schrijf en selectie actie een bepaalde colatie meegeven ? Bij voorbaat dank. nb.is het misschien verstandiger de tabel opnieuw aan te maken met bepaalde instellingen ? Link naar reactie Delen op andere sites Meer opties om te delen...
Duwgati Geplaatst: 23 oktober 2009 Delen Geplaatst: 23 oktober 2009 Dan kun je ook in phpmyadmin een export van de structure doen. Maar wat ik eigenlijk wilde zien is de character set (collation) die je gebruikt hebt voor de table. Controleer eens of die op latin1_swedish_ci staat volgens phpmyadmin. En wat de rest van de vraag betreft, dat wordt moeilijk om daarover te oordelen. Ik heb geen idee wat er in je database zit en hoe je het eruit probeert te halen. Ik zou zeggen, kijk eens met phpmyadmin of je die queries daarmee wel kunt doen. Zo ja, dan kun je phpmyadmin de query in php-format laten weergeven. Zo nee, dan moet je op zoek naar de oorzaak. Link naar reactie Delen op andere sites Meer opties om te delen...
Big fellow Geplaatst: 23 oktober 2009 Delen Geplaatst: 23 oktober 2009 Origineel bericht van: Hendrik6073 Ik heb inmiddels wel voor elkaar om de gegevens in beeld te krijgen. Kwam erachter dat er (welliswaar onzichtbaar) spaties in de namen zaten met een trim() commando heb ik deze eruit gehaald en zie dus nu de namen wel met een zoekactie. Dit klinkt alsof je de tabel hebt aangemaakt met een vaste breedte, dus geen varchar, maar een char. Een varchar stript automatisch de spaties aan het einde, een char vult het om met NULL . Mijn advies is om de tabel om te zetten naar een varchar. Dit kan gewoon met phpmyadmin volgens mij... Dan zou je ook van je andere probleem af moeten zijn. “Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill Link naar reactie Delen op andere sites Meer opties om te delen...
Hendrik6073 Geplaatst: 23 oktober 2009 Auteur Delen Geplaatst: 23 oktober 2009 ik heb het aangepast naar varchar, kan idd een deel van het probleem zijn geweest. Heb nu de tabel opnieuw aangemaakt in UTF_GENERAL_CI Bestand is in kladblok opgeslagen als UTF-8 Ik lees het bestand uit en stop hem in de databasemet hieronder staande script (1). Als ik nu met PHP een insert (2) doe en bijvoorbeeld alle namen uitvraag met een bepaalde letter en sorteer (3), krijg ik eerst alle namen keurig gesorteerd en daarna als laatste de naam welke handmatig is toegevoegd. Kan ik tijdens het toevoegen geen collatie meegeven ? Dit is wel vreemd, nooit eerder last van gehad. (1)......................................................... $file = fopen("namen.txt", "r") or exit("Unable to open file!"); //Output a line of the file until the end is reached while(!feof($file)) { $naam = fgets($file); echo "$naam<br>"; $naam = trim($naam); // $geslacht = trim($geslacht); $naam = ucfirst(strtolower($naam)); MYSQL_QUERY ("INSERT INTO namen (geslacht,naam) VALUES ('dames','$naam')"); } fclose($file); (2)................................................... MYSQL_QUERY ("INSERT INTO namen (geslacht,naam) VALUES ('$geslacht','$naam')"); (3)...................................................... $query1 = "SELECT * FROM namen WHERE naam like '$letter%' and geslacht='heren' order by 'naam'"; $sql1 = mysql_query ($query1) or die (mysql_error()); while ($row = mysql_fetch_array ($sql1)){ $naam = $row['naam']; echo "<td width='14%'><div align='left'><span class= namen'> <a href='winkel.php?naam=$naam&type=$type'>$naam</a> </span></div></td>" Link naar reactie Delen op andere sites Meer opties om te delen...
Duwgati Geplaatst: 24 oktober 2009 Delen Geplaatst: 24 oktober 2009 Wordt echt lastig om iets over te zeggen als we maar een klein deel van de info hebben. - Verschil tussen hoofd- en kleine letters misschien? - Voorloopspaties in de bestaande records misschien? En zo zijn er vast nog wel meer gissingen te maken. Laat phpmyadmin eens een complete export van structure en data doen en zet het resultaat hierneer, dan weten we tenminste waar we over praten. Link naar reactie Delen op andere sites Meer opties om te delen...
Puch Geplaatst: 24 oktober 2009 Delen Geplaatst: 24 oktober 2009 Probeer dit eens Php Code: <?php$query1 = "SELECT * FROM namen WHERE naam like '$letter%' and geslacht='heren' order by 'naam'";$sql1 = mysql_query ($query1) or die (mysql_error());while ($row = mysql_fetch_array ($sql1)){$naam = $row['naam'];$lijnen .= "<td width='14%'><div align='left'><span class= namen'><a href='winkel.php?naam=$naam&type=$type'>$naam</a></span></div></td>";}?> Dan in je html code Html: <table><tr><?php print $lijnen; ?></tr></table> iMac 27" macOS SierraiPhone 5s iOS 10 Link naar reactie Delen op andere sites Meer opties om te delen...
Duwgati Geplaatst: 24 oktober 2009 Delen Geplaatst: 24 oktober 2009 Even goed lezen Puch. Hij geeft aan dat hij een probleem heeft met de sortering. ORDER BY geeft niet het resultaat dat hij verwacht. Link naar reactie Delen op andere sites Meer opties om te delen...
Puch Geplaatst: 24 oktober 2009 Delen Geplaatst: 24 oktober 2009 oeps idd Wat me nu opvalt is dat er order by 'naam' staat. In mijn query's zet ik de tabel waarop is sorteer nooit tussen quote's en het commando altijd in hoofdletters Misschien zit het daar in. Dus $query1 = "SELECT * FROM namen WHERE naam LIKE '$letter%' and geslacht='heren' ORDER BY naam"; iMac 27" macOS SierraiPhone 5s iOS 10 Link naar reactie Delen op andere sites Meer opties om te delen...
Duwgati Geplaatst: 24 oktober 2009 Delen Geplaatst: 24 oktober 2009 Hoofd- of kleine letters voor de MySQL arguments maakt niet uit. Mag je door elkaar gebruiken. Die quotes rondom naam, da's wel een goeie ja. Alleen zou ik een MySQL error verwachten of geen resultaat als het probleem daaruit voortkomt. Maar het zou wel een hoop kunnen verklaren. Stel dat het hele ORDER BY deel van de query helemaal niet uitgevoerd wordt vanwege die quotes rondom naam. Als de records allemaal al op naamvolgorde in de tabel zijn opgeslagen, dan verklaart dat het eindresultaat. Dan wordt de laatst toegevoegde naam onderaan de tabel toegevoegd en is het eigenlijk bij toeval dat de overige records er wel op volgorde uitkomen. Link naar reactie Delen op andere sites Meer opties om te delen...
Puch Geplaatst: 24 oktober 2009 Delen Geplaatst: 24 oktober 2009 Origineel bericht van: Duwgati Hoofd- of kleine letters voor de MySQL arguments maakt niet uit. Mag je door elkaar gebruiken. Die quotes rondom naam, da's wel een goeie ja. Alleen zou ik een MySQL error verwachten of geen resultaat als het probleem daaruit voortkomt. Maar het zou wel een hoop kunnen verklaren. idd, de arguments (kon daarstraks niet op het woord komen ) zijn ongevoelig voor hoofd en kleine letters. Het is gewoon een kwestie van duidelijkheid. Je verwacht dan idd een error, maar het hangt er vanaf op welke server de site draait, Ik heb al verschillende malen meegemaakt dat mysql errors niet worden weergegeven. Zelfs als je de functie mysql_error() gebruikt. Raar maar waar. iMac 27" macOS SierraiPhone 5s iOS 10 Link naar reactie Delen op andere sites Meer opties om te delen...
Big fellow Geplaatst: 24 oktober 2009 Delen Geplaatst: 24 oktober 2009 Probeer het eens met backticks (`) rond je argumenten i.p.v. quotes (') . De backtick zit naast de "1" op je toetsenbord. “Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill Link naar reactie Delen op andere sites Meer opties om te delen...
Hendrik6073 Geplaatst: 24 oktober 2009 Auteur Delen Geplaatst: 24 oktober 2009 Origineel bericht van: Puch Wat me nu opvalt is dat er order by 'naam' staat. Nou, ik ben toch wel erg blij dat mensen kritisch meedenken/kijken. idd weg quotes weg probleem ! De import was idd al alphabetisch gesorteerd dus ik heb noit stilgestaan bij het feit dat de sortering fout kon zijn. En idd geen enkele PHP fout ontvangen. Allemaal hartelijk dank voor het meedenken ! Link naar reactie Delen op andere sites Meer opties om te delen...
Gast SatMann Geplaatst: 26 oktober 2009 Delen Geplaatst: 26 oktober 2009 ik denk dat dit inderdaad niet juist is. je moet altijd .... ORDER BY naamveld geven dus nooit die naamveld tussen een '' of " " zetten. is idem met aspx. Link naar reactie Delen op andere sites Meer opties om te delen...
Aanbevolen berichten
Maak een account aan of log in om te reageren
Je moet een lid zijn om een reactie te kunnen achterlaten
Account aanmaken
Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!
Registreer een nieuwe accountInloggen
Heb je reeds een account? Log hier in.
Nu inloggen