J'ai cherché des moyens rapides pour sélectionner une ligne au hasard à partir d'une table et ont trouvé le site suivant: http://74.125.77.132/search?q=cache:http://jan.kneschke.de/projects/mysql/order-by-rand/&hl=en&strip=1SQL: sélectionnez la ligne aléatoire de la table où l'ID de la ligne n'est pas dans une autre table?
Ce que je veux faire est de choisir une URL aléatoire de ma table « » urls que je DON "J'ai dans mon autre table" urlinfo ". La requête que j'utilise sélectionne maintenant une url aléatoire depuis 'urls' mais j'ai besoin de la modifier pour retourner uniquement une URL aléatoire qui n'est pas dans la table 'urlinfo'.
Heres la requête:
SELECT url
FROM urls JOIN (SELECT CEIL(RAND() * (SELECT MAX(urlid)
FROM urls
)
) AS urlid
) AS r2 USING(urlid);
Et les deux tables:
CREATE TABLE urls (
urlid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
url VARCHAR(255) NOT NULL
) ENGINE=INNODB;
CREATE TABLE urlinfo (
urlid INT NOT NULL PRIMARY KEY,
urlinfo VARCHAR(10000),
FOREIGN KEY (urlid) REFERENCES urls (urlid)
) ENGINE=INNODB;
-1 SQL ne dispose pas d'un opérateur ==; MySQL n'a pas de fonction NEWID(); et TOP 1 ne fonctionnera pas non plus dans MySQL :) – Andomar
Mon mauvais sur l'opérateur ==, question d'origine jamais explicitement mentionnée mysql, j'ai peut-être manqué les références à InnoDB lors de mon premier examen de la question – LorenVS