Gå til innhold

Avansert myql query


Anbefalte innlegg

Ok, dette er hva jeg prøver å få til:

 

Jeg har en db på 188k entries, alle disse slutter med "-NAVN", det jeg vil ha er en liste over de forskjellige NAVN feltene, men ikke duplikater. I en enkel mysql spørring vil det jo være distinct som blir brukt, men her må man jo få poppa arrayen før man sorterer.

 

Bruker $arr = explode("-", $var); array_pop($arr); på enkelt tilfeller.

 

Noen som har et tips?

Endret av Klette
Lenke til kommentar
Videoannonse
Annonse

Hmm.. muligens at jeg er litt for trøtt, men jeg skjønner ikke helt problemstillingen.

 

Hvis alle feltene er hardkodet med "-NAVN" på slutten av hvert navn, så har det jo ingen direkte betydning for sortering/uthenting av databasen.

 

Du må muligens kjøre koden for å strippe vekk "-NAVN" hver gang du ønsker å bruke et item til noe... men det blir vel ikke noen større "performance-penalty" av det enn å trikse noe til i sql-spørringen?

 

Lyst til å detaljere litt?

 

 

Eller kanskje det er på tide for denne kroppen å krype til køys. :yes:

 

Edit: formulering

Endret av b-urn
Lenke til kommentar

hehe, trøtthets-syndromet kjenner vi vel alle til ;)

 

Skal pøve å forklare litt til. Problemet her er å ikke få duplikater av den avkappede delen ( -NAVN ).

 

Feltet -NAVN har vel omtrent en 200-250 forkjellige verdier.

 

Jeg skal ha disse i en drop down, derfor er det litt viktig at det ikke forkommer duplikater; trenger ikke 23423 -KALLE i dropdownen ;)

Lenke til kommentar

Maa bare si at det aa lagre navn slik er mildt sagt idioti. Men det du nok maa gjoere er dette:

 

<?PHP

//koble til databasen

$Tabellnavn='MinTabell';
$Feltnavn='FeltSomHarNavnISeg';

$query='SELECT .'$Feltnavn'. FROM '.$Tabellnavn;
$result=mysql_query($query) or die(mysql_error());
while ($row=mysql_fetch_array($resut, MYSQL_ASSOC))
 $Data[]=$row;
foreach ($Data as $Oppfoering){
 $Navn=substr($Oppfoering[$Feltnavn], strrpos($Oppfoering[$Feltnavn], '-')+1);
 if (!in_array($Navn, $Navneliste))
  $Navneliste[]=$Navn;
}

echo '<PRE>';
var_dump($Navneliste);
echo '</PRE>';

?>

 

Men dette vil ta alt for lang tid til aa vaere brukbart!

 

Reparer heller tabellen din!

Endret av BlueEAGLE
Lenke til kommentar

<form name="form1" id="form1" action="POST">
 <select name="menu" onchange="MM_jumpMenu('parent',this,1)">
   <option selected="selected">:NAVN:</option>
<option value="index.php">Alle</option>
<?php
$res_grp = mysql_query("SELECT distinct(release) FROM megastore"); 
$numrows_grp = mysql_num_rows($res_list); 
$grp_arr = array();
$i = 0;
$row_grp = mysql_fetch_array($res_grp);
$grps = array_unique($row_grp);
foreach {$grps as $grp) {
echo "<option value='$PHP_SELF?navn=$grp'>$navn</option>";
}
?>
 </select>
</form>

 

Ville dette fungere? ( er ikke helt stå på arrays enda )

Lenke til kommentar

nei, fetch_array tar bare ut en rad i tabellen av gangen, du har vel gjerne flere rader, med en -NAVN kolonne i hver rad?

 

som alle andre har sagt, dette er direkte latterlig, legg om databasen med en gang, det bryter med alle prinsipper og får meg og flere til å snu oss i de graver vi måtte ligge i når den tid kommer.

 

men du kan oppnå det du ønsker slik:

select distinct substring_index(release,'-',-1) as navn from megastore

 

EDIT: gjorde den idiotsikker

Endret av Torbjørn
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...