Just nu i M3-nätverket
Gå till innehåll
jompa tompa

Array

Rekommendera Poster

Hej,

 

ett litet problem som jag behöver hjälp med. Ibland är man lite långsam, men då har man ju er :D

 

Jag har en array med några id-nummer i och jag vill hämta namnen ur en tabell (där id-nummerna också finns). Det känns enkelt, men det står ändå helt still.

 

Nån?

 

[inlägget ändrat 2003-03-24 14:21:25 av jompa tompa]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Det finns flera sätt att lösa detta på. Antingen loopar du igenom arrayen och frågar databasen vilka namn som tillhör vilka id'n i arrayen.

 

Exempel:

 

SELECT * FROM tabellen WHERE id = $array[0]

(Detta är resurskrävande om du ska hämta många namn, men är det bara ett fåtal så är det väl ok)

 

Eller så hämtar du ner all data direkt, stoppar in i en ny array och matchar de två arrayerna mot varandra.

 

Exempel:

 

SELECT * FROM tabellen

(Helt värdelöst sätt att lösa det på egentligen...)

 

Eller så loopar du genom din första array för att fixa i ordning din SELECT sats för att fråga efter allting på en gång...

 

$sql = "SELECT id,namn FROM tabellen WHERE id = ";

$i = 1;
$numberOfElements = count($array);

foreach ($array as $tmp) {
if ($i != $numberOfElements) {
	$sql .= "{$tmp} or ";
} else {
	$sql .= $tmp;
}
$i++;
}

Detta tror jag är det bästa sättet att lösa det på ur resurssynpunkt, men eftersom det finns så många olika sätt att lösa det här på så kan jag säkert ha fel. Jag kan ju inte tänka på allt åt dig! :)

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

[inlägget ändrat 2003-03-24 15:04:46 av Bj0rN]

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tack!

 

Jag använde ditt sista exempel och det funkade precis som jag ville!

 

(fick dock lägga till ett

id = 

på på raden

$sql .= "{$tmp} or "; 

som du hade glömt)

 

Tack!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ja se på tusan, hur kunde jag glömma det?

 

Fast å andra sidan har jag ju varit uppe i närmare 30 timmar i streck nu, så jag får väl bli ursäktad kanske? :)

 

Varför lägger de Oscarsgalan på en söndag för? Usch va jobbigt det blir att jobba då... ARRGHH

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Förresten,

när du ändå bevakar och verkar kunna allt. En liten SQL-fråga...

 

Kan man sortera (ORDER BY) tex P först, sen i bokstavsordning. Alltså de träffar som börjar på P ska komma först.

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Förresten,

när du ändå bevakar och verkar kunna allt. En liten SQL-fråga...

Nja, allt är kanske att ta i! :)

 

Kan man sortera (ORDER BY) tex P först, sen i bokstavsordning. Alltså de träffar som börjar på P ska komma först.

ORDER BY name DESC sorterar på namn i bokstavsordning. Du kan dock inte börja direkt på P sådär och sedan fortsätta (tror jag), om du nu inte ändrar SELECT satsen så att du söker efter allting som börjar på P:

 

SELECT * FROM tabellen WHERE Name LIKE 'P%'

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Vad har du för dbms?

Om du har MSSQL så kan du göra en union på två frågor:

SELECT * FROM tabellen ..... WHERE somecolumn LIKE 'P%' and id = ...

UNION ALL

SELECT * FROM tabellen ..... WHERE somecolumn [color="#0000ff"] NOT[/color] LIKE 'P%' and id = ...

annars får du väl göra 2 anrop till databasen där de första hämtar de som börjar på P och det andra där de inte börjar på P. För att sedan fylla din array.

//Telle

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Så sant så sant! Det finns tydligen UNION i version 4 av MySQL oxå. Så om du kör det så är det lugnt, annars kan du ju följa exemplet i kommentarerna i manualen för att emulera en union, men då är nog kanske två frågor att föredra. http://www.mysql.com/doc/en/UNION.html

 

Unions är något du inte ska använda dig för mycket av heller, det är inte det snabbaste, jag vet flera db experter som skyr union som pesten....

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Okej, jag var lite inne på det spåret, men jag tänkte att man kan ju fråga om det finns ett enklare sätt innan man börjar ge sig på det.

 

Tack ändå!

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

En mycket bättre lösning än UNIONS är följande, som använder sig av enkel SQL-syntax.

Beroende lite på vilken databas du kör så heter funktionen SUBSTRING() lite olika, men följande fungerar exempelvis för MySQL:

SELECT * FROM tabell ORDER BY SUBSTRING(namn,1,1) = 'P' DESC, namn

 

Den listar då alla som börjar med P först, och sorterar sedan efter kolumnen 'namn'.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...